フォルダ内のファイル名のボトムアップ逆スワップ

フォルダ内のファイル名のボトムアップ逆スワップ

フォルダにいくつかの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を使用してください。

おすすめ記事