特定のディレクトリには約10,000個のファイルがあります。そこからランダムに1000個のファイルを選択して別のディレクトリに入れるのに役立つコマンドはありますか?選択したファイルは元のディレクトリから削除する必要があります。
答え1
このファイルがある場合は、shuf
ファイル名に改行文字やサブディレクトリがない場合は、必要な操作を簡単に実行できます。
mapfile -t sample < <(shuf -n 1000 -e given_directory/*)
mv "${sample[@]}" other_directory
find
サブディレクトリがある場合は、代わりにglobを使用してファイルのリストをインポートできます。あるいは、オーバーサンプリングしてフィルタリングすることもできます。また、タスクをフラグと組み合わせることfind
ができるので、名前に改行文字がある可能性のあるファイルを処理するのに役立ちます(これは実際には悪い考えですが、必ずしも可能性を無視できるわけではありません)。例えば、-print0
-z
shuf
find given_directory -type f -print0 |
shuf -z -n 1000 |
xargs -0 mv -t other_directory
mv -t
コマンドラインの先頭にターゲットディレクトリを提供できる(非常に便利な)Gnu拡張。これは、xargs
コマンドラインの最後に複数の引数を配置する/モデルとうまく機能します。find -exec