使用 find 命令或其他命令删除目录

使用 find 命令或其他命令删除目录

我正在尝试编写一个命令,仅保留最后 2 个备份并删除其余目录。

directory path = /apps/

以下是目录,这里我只想保留

  • source
  • source_2020-01-13
  • source_2019-12-09

目录并删除旧的。该脚本将使用 cron 在 100 多个服务器上运行。

这里的问题是,在find命令中我将无法添加mtime或删除旧目录 - 为什么因为备份目录时间戳在所有服务器上都不相同。基本上,命令/脚本应保留最后两个名为 source_YYYY_MM_DD 的备份目录,并删除其余的目录。

有人可以帮忙吗?

笔记 :来源_YYYY_MM_DD是备份目录。

drwx------ 11 root   root   4096 Jul 22  2019 source_2019-07-22
drwx------ 11 root   root   4096 Jul 29  2019 source_2019-07-29
drwx------ 11 root   root   4096 Aug  5  2019 source_2019-08-05
drwx------ 11 root   root   4096 Aug 14  2019 source_2019-08-14
drwx------ 11 root   root   4096 Oct 14  2019 source_2019-10-14
drwx------ 11 root   root   4096 Dec  9 03:59 source_2019-12-09
drwx------ 11 root   root   4096 Jan 13 05:20 source_2020-01-13
drwxr-x--- 12 root   root   4096 Apr 21 09:11 source

答案1

ls -d1 /apps/source_20??-??-??/ | head -n -2 | xargs rm -rf

由此
ls -d1 /apps/source_20??-??-??/将仅按排序顺序列出匹配的目录,
head -n -2取出最后两个条目,
xargs rm -rf然后删除目录。

答案2

find /apps/ -type d -not -name source -name "source*" -print | sort | head -n -2 | xargs rm -rfv

find apps/ -type d -not -name source -name "source*" -print将找到所有备份目录,确保命令source不会拾取这些目录find

sort将排序,确保最新的排在最后。这不是基于修改时间,而是基于目录名称。

head -n -2获取所有目录,最后 2 个备份目录。

xargs rm -rfv删除除上一命令过滤的最后 2 个之外的所有备份目录。

(警告:如果目录名称包含空格,此命令将不起作用。始终先测试创建假目录并尝试此命令。)

相关内容