指定したディレクトリから任意のファイルサブセットを選択します。

指定したディレクトリから任意のファイルサブセットを選択します。

特定のディレクトリには約10,000個のファイルがあります。そこからランダムに1000個のファイルを選択して別のディレクトリに入れるのに役立つコマンドはありますか?選択したファイルは元のディレクトリから削除する必要があります。

答え1

このファイルがある場合は、shufファイル名に改行文字やサブディレクトリがない場合は、必要な操作を簡単に実行できます。

mapfile -t sample < <(shuf -n 1000 -e given_directory/*)
mv "${sample[@]}" other_directory

findサブディレクトリがある場合は、代わりにglobを使用してファイルのリストをインポートできます。あるいは、オーバーサンプリングしてフィルタリングすることもできます。また、タスクをフラグと組み合わせることfindができるので、名前に改行文字がある可能性のあるファイルを処理するのに役立ちます(これは実際には悪い考えですが、必ずしも可能性を無視できるわけではありません)。例えば、-print0-zshuf

find given_directory -type f -print0 |
shuf -z -n 1000 |
xargs -0 mv -t other_directory

mv -tコマンドラインの先頭にターゲットディレクトリを提供できる(非常に便利な)Gnu拡張。これは、xargsコマンドラインの最後に複数の引数を配置する/モデルとうまく機能します。find -exec

関連情報