Bash - 最も古いものから最新のものまでファイルを移動して名前を変更する方法

Bash - 最も古いものから最新のものまでファイルを移動して名前を変更する方法

だから私が書こうとしているスクリプトがあります。あるディレクトリからすべての.mp3ファイルをインポートし、別のディレクトリに移動し、0001.mp3、0002.mp3などの数字順に名前を付けます。

i=0
for f in *.mp3; do
i=$((i+1));
mv "$f" "/home/jwt13/Testing/$(printf %04d $i).mp3";
done

これで、上記のコマンドはファイルの以前の時間に基づいて移動し、名前を変更するように努めています。したがって、最も古いファイルの名前は0001になり、2番目に古いファイルの名前は0002になります。上記のスクリプトを使用してこれをどのように実行できますか?ここにいくつの行を追加できますか?それとも、内容全体を別々に書き直す必要がありますか?

ありがとう

答え1

*.mp3次のように変更してください$(ls -rt *.mp3)

i=0
for f in $(ls -rt *.mp3); do
    i=$((i+1));
    mv "$f" "/home/jwt13/Testing/$(printf %04d $i).mp3";
done

-t-r最も古いファイルから変更時刻に基づいてファイルを並べ替えます。

@Jeffが述べたように、ファイル名に奇妙な文字が含まれている場合、上記の方法は機能しません。この場合、以下を使用する必要があります(まだ改行文字を処理できません)。

i=0
ls -rt *.mp3 |
while read -r f; do
    i=$((i+1));
    mv "$f" "/home/jwt13/Testing/$(printf %04d $i).mp3";
done

その出力はループls全体whileにパイプされます。

関連情報