7

3月 16

 

Linuxで複数ファイルのファイル名の中の複数の箇所の文字列を任意の文字列に変換する方法

terminal

先日、複数ファイルのファイル名の中にある2箇所の文字列を消したいなあと思い、いきついた方法。

たとえば、
hoge123fuga-ed.txt
という名前のファイルがあるとする。
このファイルは123から200まで連番であったと。

こいつを
123fuga.txtから
200fuga.txt
に変換したい。

そうした場合以下の方法が有効であった。

find ./* -type f | sed 'p;s/hoge//g;s/-ed//g' | xargs -n2 mv

findでカレントディレクトリ以下のファイルを全てリストアップする。

リストアップされたファイル名をsedをつかって編集する。

‘p;s/hoge//g;s/-ed//g’の意味は以下の通り

p;
によって元のファイル名が出力される事になる。
次に
s/hoge//g;
でファイル名の中のhogeを全て空白に変換している

そしてもういちど

s/-ed//g;

によってファイル名の中のすべての-edを空白に変換。

ここまでで実行すると

という結果がコンソールに表示される。

これらをパイプを介して

xargs -n2

する事によって

という形に整形できる。

あとは最後の

mv

によって全てのの元のファイル名が変更されたファイル名に変更される。

|xargs -n2 mv

って使い方初めて見ました。

リファレンスはこちら。
xargs コマンド | コマンドの使い方(Linux) | hydroculのメモ

不思議な感じでちょっと覚えにくいですが、こういう使い方ができるし、動きますっていう事で。




No comments yet, be the first.

コメントを残す