web-dev-qa-db-ja.com

各ファイル名の先頭にランダムな文字/数字を追加するにはどうすればよいですか?

各ファイル名の最初の文字をランダムにしたいシステムで作業しています-必ずしも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

これを行う方法はありますか?

1
Undo

このスクリプトを参照してください。私はあなたが欲しかったものを正確に試しました。

#!/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の出力を解析するのではなく、単純なシェルグロブを使用することをお勧めします。

3
souravc

環境変数$ RANDOMを使用できます。

#!/bin/bash
for F in *.mp3 ; do
    mv $F $RANDOM.$F
done

ファイルを移動します:

songa.mp3
song7.mp3

1875.songa.mp3
32654.song7.mp3

例えば。

3

これが@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

いずれにしても、これらは最初は乱数のみを実行することにも注意してください。

1
Wilf