さて、奇妙な要求のように聞こえるかもしれませんが、本当に良い目的に役立ちます! JPEG写真のスライドショーを表示できるSDカードスロット付きのパナソニックプラズマテレビがあります。これは画面のやけどを防ぐのに便利です。料理中にしばらくテレビを離れたり、通話中にスライドショーを開始したりすると、静的画像が表示されないようにするのが便利です。そして、写真を見るとずっと別のことをするようになります。
問題は、スライドショーが常にアルファベット順の最初の写真から始まるということです。つまり、常に同じ画像が見えて終わらないことを意味します。私がやりたいことは、私のUnixコンピュータに/media/sdcard
SDカード(私がインストールしたもの)で実行できるスクリプトを置き、そのディレクトリにあるすべてのファイルの名前をランダムに指定することです。いいえ本物どのようにランダムに指定するかは関係ありません。しかし、そうします。好む純粋な数字名(明らかな理由なし)
これを達成する簡単な方法はありますか?それはまるでfind /media/sdcard -exec mv {} rand() \;
?
ボーナスポイントを獲得するためにスクリプトをブロックする方法書く両方のファイルがクラッシュした場合はどうなりますか?写真のコピーだから失うとオリジナルは残るけどそれでも不便そうだな…
ベストアンサー1
find . -type f |
shuf | # shuffle the input lines, i.e. apply a random permutation
nl -n rz | # add line numbers 000001, …
while read -r number name; do
ext=${name##*/} # try to retain the file name extension
case $ext in
*.*) ext=.${ext##*.};;
*) ext=;;
esac
mv "$name" "../randomized/${name%/*}/$number$ext"
done
適切であると判断された場合、または別のターゲットディレクトリmv
に置き換えてください。ランタイムは依然としてディレクトリを巡回する可能性があるため、同じディレクトリ内のファイルの名前を変更したりファイルをリンクしたりしないでください。ln
ln -s
find
mv
shuf
GNU coreutils のみ、残りは POSIX です。 Linux または Cygwin を使用していない場合は、代替を参照してください。アッまたは真珠。