数十万のファイルを含むディレクトリがあります。
ディレクトリ内のすべてのファイルを処理せずに、これらのファイルのサンプル(サンプル10個のファイル)を一覧表示する必要があるため、処理に時間がかかりすぎます。
答え1
ファイルシステムレベルでも何らかの方法でファイルをすべて読まないと、ファイル全体のリストからサンプリングできないと思います。
〜しない限りその名前はパターン(例:fileXXXXXXX)に従います。この場合、ファイルにアクセスする前に任意の名前のリストを事前に作成できます。ファイル数が多すぎて名前がランダムであればおかしいでしょう。
しかし、あなたがそれほど幸運ではないとしましょう。を使用すると、出力をヌルエスケープすることができ、ファイル名の非標準文字の影響を受けないようになりますfind
。ls
すべてのファイルを読みたくない場合は、リストの先頭にあるファイルを使用するのが最速です。より良いサンプルを得るには、より大きなサンプル(下)から始めて、ランダム$oversamplesize
にサイズを選択します。空の区切り文字の作成または使用$samplesize
に成功しなかったため、混合と最終選択は次のように行われました。sort -R
shuf
awk
find ~ -type f -print0 |
grep --null --null-data -m ${oversamplesize:-100} . |
awk -v samplesize=${oversamplesize:-11} -vRS='\0' -vORS='\0' \
'{ a[NR]=$0 } END {srand(); while (i<samplesize) { b=(int(rand()*10000)%samplesize); if (b in c) {continue;} else {c[b]=a[b]; print a[b]; i++;} }; }' |
xargs -0 echo # echo here being just a dummy
ここに2つのメモがあります。何らかの理由で通常は空のファイル名も印刷されているため、サンプルのサイズを増やしました。重要なのは、検索パス(〜ここ)と最終コマンドを変更することを忘れないことです。