置換検索を使用してバッチファイル名を変更する

置換検索を使用してバッチファイル名を変更する

Bashを使って大量のファイル名をまとめて変更するには?既存の名前と「コンテキストマッピング」に基づいて各ファイルの新しい名前を設定する必要があります。何と呼ぶのかよくわかりません。名前の断片化です。

次のファイルがたくさんあります。

001.jpg
003.jpg
004.jpg
007.jpg
...

そして次のマップがあります:

001,white
003,grey
004,red
007,green
...

001.jpgが001-white.jpgなどになるように、すべてのファイルの名前を変更したいと思います。

どうすればいいですか?

ベストアンサー1

bash4:配列への最初の読み取りマッピング

declare -A arr2
while IFS=, read -r -a arr; do
    arr2[${arr[0]}]="${arr[1]}";
done < mapfile.txt

その後、名前を変更してください

for f in [0-9][0-9][0-9].jpg; do
    if [[ "${arr2[${f%.*}]+_}" ]]
    then
        mv -- "${f}" "${f%.*}"-"${arr2[${f%.*}]}"."${f##*.}";
    else
        mv -- "${f}" "${f%.*}"-default."${f##*.}";
    fi
 done

おすすめ記事