時々私はjpgでいっぱいのフォルダを持っていて、それらの中からランダムに8個程度を選択する必要があります。これを自動化して、アカウントがフォルダーから8つのjpgをランダムに選択し、それらを別の宛先にコピーするにはどうすればよいですか?
私の質問は本当に単純です。cp
を使用してファイル名、次に宛先ファイル名を付けるのではなく、フォルダー内の8つの.jpgをランダムに選択し、それらを別のフォルダーにコピーするスクリプトを作成します。
shuf
を使用できます:
shuf -zn8 -e *.jpg | xargs -0 cp -vt target/
shuf
は、現在のディレクトリにある*.jpg
ファイルのリストをシャッフルします。-z
は、各行をゼロで終了するため、特殊文字を含むファイルが正しく処理されます。-n8
は、8ファイルの後にshuf
を終了します。xargs -0
は、ヌル文字で区切られた入力を読み取り(shuf -z
から)、cp
を実行します。-v
は、すべてのコピーを冗長に印刷することです。-t
は、ターゲットディレクトリを指定します。-e *.jpg
は実際には作業ディレクトリを調べないため、最良の回答は私にとってはうまくいきませんでした。それは単なる表現です。 shuf
は何もシャッフルしません...
その投稿で学んだことから、次のような改善が見られました。
find /some/dir/ -type f -name "*.jpg" -print0 | xargs -0 shuf -e -n 8 -z | xargs -0 cp -vt /target/dir/
次の方法でファイルを取得できます。
files=(/tmp/*.jpg)
n=${#files[@]}
file_to_retrieve="${files[RANDOM % n]}"
cp $file_to_retrieve <destination>
ループを8回作る。