だから私が書こうとしているスクリプトがあります。あるディレクトリからすべての.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
にパイプされます。