Linux

從給定目錄中隨機選擇一定比例的文件

  • September 4, 2016

給定目錄下大約有 10000 個文件。是否有任何命令可以幫助我從中隨機挑選 1000 個文件並將它們放入另一個目錄。選擇的文件應該從原始目錄中刪除。

如果你有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模型在命令行末尾放置多個參數很好地配合。

引用自:https://unix.stackexchange.com/questions/307875