Linux

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

先日、複数ファイルのファイル名の中にある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のメモ

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

Linux Mintの立ち上げ直後にプログラムを一度だけ実行する方法前のページ

Linuxで複数のファイルの末尾にワンライナーで文字列を追記する方法次のページ

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

最近の記事

Twitter

PAGE TOP