先日、複数ファイルのファイル名の中にある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を空白に変換。
ここまでで実行すると
元のファイル名1
変更されたファイル名1
元のファイル名2
変更されたファイル名2
元のファイル名3
変更されたファイル名3
.
.
.
という結果がコンソールに表示される。
これらをパイプを介して
xargs -n2
する事によって
元のファイル名1 変更されたファイル名1
元のファイル名2 変更されたファイル名2
という形に整形できる。
あとは最後の
mv
によって全てのの元のファイル名が変更されたファイル名に変更される。
|xargs -n2 mv
って使い方初めて見ました。
リファレンスはこちら。
xargs コマンド | コマンドの使い方(Linux) | hydroculのメモ
不思議な感じでちょっと覚えにくいですが、こういう使い方ができるし、動きますっていう事で。
この記事へのコメントはありません。