各ファイル名の最初の文字をランダムにしたいシステムで作業しています-必ずしもniqueではなく、ランダムにしてください。これをcronジョブから実行できるようにしたいのですが。
たとえば、次のようなファイルのリストをポイントすることができます。
song.mp3 song1.mp3 song2.mp3
song3.mp3 song4.mp3 song5.mp3
そして、ファイル名を次のように変更します。
a song.mp3 g song1.mp3 k song2.mp3
r song3.mp3 l song4.mp3 e song5.mp3
これを行う方法はありますか?
このスクリプトを参照してください。私はあなたが欲しかったものを正確に試しました。
#!/bin/bash
for item in *.mp3
do
mv "$item" "$(cat /dev/urandom | tr -cd 'a-z' | head -c 1) $item"
done
ランダムな文字はどのように拾われるのですか
ここでは、/dev/urandom
から文字列を取得し、[a-z]の間にないすべての文字を削除して、最後に最初の文字のみを保持しています。
使い方
コードをファイルにコピーします。たとえば、rename_song.sh
とし、次のようにターミナルを使用して実行権限を付与します。
chmod +x /path/to/rename_song.sh
rename_song.sh
を.mp3
ファイルがあるディレクトリにコピーします。端末からスクリプトを実行します(最初に.mp3
ファイルがあるディレクトリに移動します)。
./rename_song.sh
次のようなファイルのリストがある場合
song.mp3 song1.mp3 song2.mp3
song3.mp3 song4.mp3 song5.mp3
これらの名前は次のように変更されます。
a song.mp3 g song1.mp3 k song2.mp3
r song3.mp3 P song4.mp3 A song5.mp3
数字だけでなく文字も必要な場合は、tr -cd 'a-z'
をtr -cd 'a-z0-9'
に置き換えます。ls
の出力を解析するのではなく、単純なシェルグロブを使用することをお勧めします。
環境変数$ RANDOMを使用できます。
#!/bin/bash
for F in *.mp3 ; do
mv $F $RANDOM.$F
done
ファイルを移動します:
songa.mp3
song7.mp3
に
1875.songa.mp3
32654.song7.mp3
例えば。
これが@Josephのスクリプトのワンライナーバージョンです。ターミナルに貼り付けることができます。
まず、目的のディレクトリに移動します。
cd /PATH/TO/DIRECTORY/
そして、ターミナルから直接コマンドを実行できます:
for F in $(ls *.mp3); do mv "$F" "$RANDOM.$F" ; done;
そしてそれの短いバージョンは次のようになります:
for F in *.mp3 ; do mv "$F" "$RANDOM.$F" ; done
いずれにしても、これらは最初は乱数のみを実行することにも注意してください。