如何列出目錄中的文件範例

如何列出目錄中的文件範例

我有一個包含數十萬個檔案的目錄。
我需要列出這些文件的範例(範例 10 個文件),而不處理目錄中找到的所有文件,這將花費太多處理時間。

答案1

我認為您無法在不以某種方式讀取所有文件的情況下從整個文件列表中進行採樣,即使在文件系統級別也是如此。

除非它們的名稱遵循一種模式(例如 fileXXXXXXX),在這種情況下,您可以在存取文件之前預先產生隨機名稱清單。對於如此大量的文件,如果它們的名稱是隨機的,那就很奇怪了。

但我們假設你沒那麼幸運。使用find優於ls,因為它可以使用 null 轉義輸出,從而使其不受檔案名稱中非標準字元的影響。如果我們不想讀取所有文件,那麼使用清單開頭的文件是最快的。為了獲得更好的樣本,我會先使用更大的樣本(如下),然後從那裡$oversamplesize隨機選擇大小。$samplesize我沒有成功地製作sort -Rshuf使用空分隔符,因此洗牌和最終選擇是通過以下方式完成的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

這裡有兩個註解。由於某種原因,它通常也會列印空白文件名,因此我增加了樣本大小以防萬一。重要的注意事項是不要忘記更改搜尋路徑(〜此處)和最終命令。

相關內容