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