2

現在名前が付けられている数百のファイルの名前を変更するには、どのコマンドを使用できますか

file.2003-01-02.txt
file.2003-01-04.txt

... 等々?次のように名前を付けてください。

file_y2003m01d02.txt
file_y2003m01d04.txt

...など

つまり、file.2007-12-09.txtになりfile_y2007m12d09ます。これを行うための簡単なコマンドセットはありますか?

同様に、ファイルの名前がfile_y2003m02d01_grid.txt. _grid上記で提案した形式と一致するように、各ファイル名から削除する方法を知りたいです。

4

2 に答える 2

3

rename次のコマンドを使用できます。

rename 's/^file\.([0-9]{4})-([0-9]{2})-([0-9]{2})\.txt$/file_y$1m$2d$3.txt/' *

これは、Perl 正規表現置換を使用してファイル名を変換します。上記のコマンドは次のように述べています。

  1. (エスケープする必要があります。それ以外の場合は任意の文字に一致します) で始まり、キャプチャされた^グループ(数字、4 回)、 、数字の別のキャプチャされたグループが 2 回など、;で終わるファイルを検索します。file..()[0-9]{4}-$.txt

  2. 次に、これらのファイルの名前を に変更し、その後file_yに最初のキャプチャされたグループ$1m、2 番目のキャプチャされたグループ$2などと続き、 で終わり.txtます。

また、同じコマンドを使用して 2 番目の問題を解決する方法を理解できるはずです。どのようにrename機能するかはわかりません。

于 2013-08-01T19:12:04.653 に答える
0

sed を使用することもできます。

例えば:

ls | while read f; do echo "mv $f $(echo $f | sed 's/\./_y/;s/-/m/;s/-/d/')"; done

これにより、bash が実行するコマンドが表示されます。実際に移動するには、エコーと引用符を削除します。

ls | while read f; do mv $f $(echo $f | sed 's/\./_y/;s/-/m/;s/-/d/'); done
于 2013-08-01T19:27:43.057 に答える