Linux

查找命令輸出進行排序然後刪除

  • November 11, 2021

我想根據路徑中的某些模式查找一些文件,然後我只想保留該模式的 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)

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