web-dev-qa-db-ja.com

あるディレクトリから別のディレクトリに特定の種類のファイルをランダムにコピーする

時々私はjpgでいっぱいのフォルダを持っていて、それらの中からランダムに8個程度を選択する必要があります。これを自動化して、アカウントがフォルダーから8つのjpgをランダムに選択し、それらを別の宛先にコピーするにはどうすればよいですか?

私の質問は本当に単純です。cpを使用してファイル名、次に宛先ファイル名を付けるのではなく、フォルダー内の8つの.jpgをランダムに選択し、それらを別のフォルダーにコピーするスクリプトを作成します。

8
David Provost

shufを使用できます:

shuf -zn8 -e *.jpg | xargs -0 cp -vt target/
  • shufは、現在のディレクトリにある*.jpgファイルのリストをシャッフルします。
  • -zは、各行をゼロで終了するため、特殊文字を含むファイルが正しく処理されます。
  • -n8は、8ファイルの後にshufを終了します。
  • xargs -0は、ヌル文字で区切られた入力を読み取り(shuf -zから)、cpを実行します。
  • -vは、すべてのコピーを冗長に印刷することです。
  • -tは、ターゲットディレクトリを指定します。
20
chaos

-e *.jpgは実際には作業ディレクトリを調べないため、最良の回答は私にとってはうまくいきませんでした。それは単なる表現です。 shufは何もシャッフルしません...

その投稿で学んだことから、次のような改善が見られました。

find /some/dir/ -type f -name "*.jpg" -print0 | xargs -0 shuf -e -n 8 -z | xargs -0 cp -vt /target/dir/
3
Halavus

次の方法でファイルを取得できます。

files=(/tmp/*.jpg)
n=${#files[@]}
file_to_retrieve="${files[RANDOM % n]}"
cp $file_to_retrieve <destination>

ループを8回作る。

1
Tiburon