複数のファイルがあり、ファイル名の先頭に文字を追加し、拡張子を追加し、単一のコマンドを使用してファイル名の中央にある単語を削除したいと思います。 bashを使って実行しています。これは私のファイルです:
DATA_20210301_INPUT_CHECK
DATA_20210302_INPUT_CHECK
DATA_20210303_INPUT_CHECK
DATA_20210304_INPUT_CHECK
1回の操作で名前を次のように変更したいと思います。
1_DATA_20210301_CHECK.DAT
1_DATA_20210302_CHECK.DAT
1_DATA_20210303_CHECK.DAT
1_DATA_20210304_CHECK.DAT
単一のコマンドを使用してすべてのファイル名を一度に変更するには?私が知る限り、これらすべてのループは1つずつ行われます。
for f in *; do mv "$f" "$f.DAT"; done
for i in *; do mv "$i" 1_"$i"; done
for i in *; do mv "${i}" "${i//\_INPUT/}"; done
助けてください、ありがとう!
答え1
このrename
コマンドでこれを行うことができます。私はGNUとPerlの正規表現の2つのバージョンを知っています。
牛に似た栄養の一種:
rename DATA 1_DATA DATA*
正規表現:
rename s/^/1_/ DATA*
実行して、rename --help
現在使用しているバージョンを確認してください。
答え2
これは実際には2つのコマンドですが、目的の出力を提供します。
rename 'DATA' '1_DATA' DATA_2021030*_INPUT_CHECK && rename 'CHECK' 'CHECK.DAT' *DATA_2021030*_INPUT_CHECK
出力:
1_DATA_20210301_INPUT_CHECK.DAT
1_DATA_20210302_INPUT_CHECK.DAT
1_DATA_20210303_INPUT_CHECK.DAT
1_DATA_20210304_INPUT_CHECK.DAT