私は Linux を使っていて、面白い写真をたくさんダウンロードしています。残念ながら、download (1)
や などの重複した名前がたくさん残っていimage.jpeg
ます。それらをすべてもう少し役立つものに変更したいと思います。
(できれば bash を使用して) すべてのファイルの名前を、先頭にゼロを付けた連続した 4 桁の数字に変更する方法はありますか?
例えば:
0001
0002
0003
0004
....
前の回答で提供されたコード スニペットは、それを行うエレガントな方法ですが、タイプミスまたはシェルの非互換性により、正しく機能しない可能性があります。
代わりに以下のコードを試してください。同じことを行いますが、すべてのショートカットはecho
ループ内のデバッグ コマンドで明示的に記述されています。
counter=1
cd /my/image/directory
for f in $(ls -1)
do
new_filename=$(printf "%04d" ${counter})
echo "renaming ${f} ..to.. ${new_filename}"
mv ${f} ${new_filename}
(( counter=${counter}+1 ))
done
画面出力は少しおしゃべりになります。ファイルが多すぎる場合は、コマンド| tee screen.out
を使用して行末に追加することをお勧めしますdone
。戻って、screen.out に記録されたどのファイルに何が起こったのかを確認できるようにします。
これを行うための独自のツールを作成しました。また、ファイル拡張子も保持していますが、これについては触れていませんが、おそらく含まれているはずです。コードは次のとおりです。
#!/bin/sh
dir=$1
cd $dir
echo "Renaming all files in $dir."
COUNTER=1
for i in `ls -1`
do
extension=${i##*.}
mv "$i" "$COUNTER.$extension"
echo "$i ==> $COUNTER.$extension"
COUNTER=$(expr $COUNTER + 1 )
done
(執筆時点では)先行ゼロは含まれていませんが、仕事は完了します。
フォルダー内のサフィックス .bash からサフィックス .sh のすべてのファイルの名前を変更しようとするのは、
rename .bash .sh *.bash
どのファイルの名前が何に変更されたか気にしない限り、簡単です:)
counter=1
for f in *; do
mv "$f" "$( printf "%04d" $((counter++)) )"
done