フォルダにいくつかのjpgファイルがあります。
hg_test_spr.jpg
hg_test00001.jpg
hg_test00002.jpg
hg_test00003.jpg
hg_test00004.jpg
hg_test00005.jpg
hg_test00006.jpg
.
.
.
hg_test01200.jpg
最初のファイルの名前が最後のファイルに変わり、2番目のファイルが2番目から最後のファイルに変わるように、ファイル名を逆順に変更したいと思います。
言い換えれば:
hg_test_spr.jpg --> DO NOT RENAME THIS
hg_test00001.jpg --> hg_test01200.jpg
hg_test00002.jpg --> hg_test01199.jpg
hg_test00003.jpg --> hg_test01198.jpg
hg_test00004.jpg --> hg_test01197.jpg
hg_test00005.jpg --> hg_test01196.jpg
hg_test00006.jpg --> hg_test01195.jpg
.
.
.
hg_test01199.jpg --> hg_test00002.jpg
hg_test01200.jpg --> hg_test00001.jpg
このようにして、ファイルのリストを逆順にインポートできます。
ls *.bmp | tac | tee reverse_order.txt
またはより良いかもしれません:
ls *hg_test0*.bmp | tac | tee reverse_order.txt
これにより、次のようになります。
mkdir renamed
for file in *hg_test0*.bmp; do read line; cp -v "${file}" "renamed/${line}"; done < reverse_order.txt
これを行う最良の方法は何ですか?
ベストアンサー1
5桁で表示されるファイルの番号順に応じて、シェルのglob機能を使用して必要に応じて名前を変更できます。
shopt -s nullglob
fileList=(hg_test[0-9]*)
count="${#fileList[@]}"
for file in hg_test[0-9]*; do
echo "$file" "hg_test$(printf "%05d" "$count").jpg"
((count--))
done
echo
これはデフォルトで置き換えられたファイル名を含む実際のファイル名です。名前が期待どおりに残っている場合は、削除してecho
コマンドmv
を使用してください。