ディレクトリ内のすべてのファイル名を特定の形式に変更するには? [コピー]

ディレクトリ内のすべてのファイル名を特定の形式に変更するには? [コピー]

この形式の多くのファイルを含むディレクトリがあります。以下は私のファイルの2つの例です。

file_948_of_2000_push_data_12345.log
file_950_of_2000_push_data_12345.log

ご覧のとおり、唯一の違いはファイル番号948です950。今、この特定の形式ですべてのファイルの名前を変更したいと思います。

files_948.log
files_950.log

私ができる最良の方法は何ですか?

ベストアンサー1

シェルパラメータ拡張の使用

$ for f in *.log; do g="${f/#file_/}"; echo mv -- "$f" "files_${g%%_*}.log"; done
mv -- file_948_of_2000_push_data_12345.log files_948.log
mv -- file_950_of_2000_push_data_12345.log files_950.log

Perlベースprenameまたはrenameコマンドを使用してください。

$ prename -n -- 's/^(.*?)_(.*?)_.*\.log$/$1s_$2.log/' *.log
file_948_of_2000_push_data_12345.log renamed as files_948.log
file_950_of_2000_push_data_12345.log renamed as files_950.log

使用mmv

$ mmv -n '*_*_*.log' '#1s_#2.log'
file_948_of_2000_push_data_12345.log -> files_948.log
file_950_of_2000_push_data_12345.log -> files_950.log

必要に応じて削除するか-necho

おすすめ記事