Command-Line
在子目錄中保留 N 個文件
我正在嘗試做一些看起來很簡單但我無法解決的事情。
我有一個包含一堆子目錄的目錄,所有這些子目錄都有多個文件(jpg 文件)。我想執行一個在這些目錄中只保留 4 個或 N 個文件的命令。文件的順序並不重要,因為我看到相關問題取決於它們的創建時間
我玩過 ls + head 並嘗試使用 -delete 選項將 find 放入循環中,但仍然沒有運氣。
也許是這樣的:
for dir in /target/dir/*/; do (cd -- "$dir" && set -- *.jpg && [ "$#" -gt 4 ] && shift 4 && rm -f -- "$@") done
其中
zsh
,您可以縮短為:for dir (/target/dir/*(/)) rm -f $dir/*.jpg(N[5,-1])
假設這些是正常文件,路徑中沒有空格、換行符、引號、反斜杠或無效字元:
find /target/dir/ -type f \ | awk '{t=$0; gsub(/\/[^/]*$/, "", t); if(a[t]++ < 4) print}' \ | xargs rm --
如果您的實用程序支持某些副檔名,請參閱下面的評論,了解如何將其調整為更有趣的文件名。