Linux
查找命令輸出進行排序然後刪除
我想根據路徑中的某些模式查找一些文件,然後我只想保留該模式的 3 個最新文件以及我想刪除的其他文件。
與
zsh
:echo rm -f ./**/*pattern*(.Dom[4,-1])
**/
任何級別的子目錄(...)
glob 限定符以根據其他條件限定匹配:.
:僅正常文件D
:包括點文件(隱藏文件)並查看隱藏目錄om
:按修改時間排序(從最新到最舊)[4,-1]
:從第 4次到最後一次(所以跳過前 3 次)。(刪除
echo
以實際執行)對於使用任何 POSIX shell 和 GNU 實用程序的等效項:
(export LC_ALL=C find . -name '*pattern*' -type f -printf '%T@/%p\0' | sort -zrn | tail -zn +4 | cut -zd/ -f2- | xargs -r0 echo rm -f)
(刪除
echo
以實際執行)使用舊版本的 GNU 實用程序,您可能需要:
(export LC_ALL=C find . -name '*pattern*' -type f -printf '%T@/%p\0' | tr '\n\0' '\0\n' | sort -rn | tail -n +4 | cut -d/ -f2- | tr '\n\0' '\0\n' | xargs -r0 echo rm -f)