1

我需要编写一个递归脚本来删除名为“date-2012-01-01_12_30”的子文件夹中的所有文件夹,但保留两个最新的。

/var/www/temp/updates/ 然后按“日期”和“代码”显示数百个文件夹

例如

/var/www/temp/updates/2012-01-01/temp1/date-2012-01-_12_30
/var/www/temp/updates/2012-01-01/temp1/date-2012-02-_13_30
/var/www/temp/updates/2012-01-01/temp1/date-2013-11-_12_30
/var/www/temp/updates/2012-01-01/temp2/date-2012-01-_12_30

我正在考虑使用 find 来获取文件夹,但不确定如何知道我可以删除哪些文件夹,因为脚本必须知道该子文件夹中的日期文件夹以及哪些文件夹是最新的

嗯,有什么帮助会很好吗?

4

2 回答 2

1

如果所有文件夹都在子目录temp1, temp2, ... 中,您可以使用ls -tr

ls -dtr /var/www/temp/updates/2012-01-01/temp*/* | head -n -2 | xargs rm -rf

这列出了按时间排序的所有文件夹ls -dtr,除两个最新的文件夹外head,其余文件夹均被删除xargs rm -rf

于 2013-01-29T15:18:56.870 回答
1

这应该有效:

find /var/www/temp/updates/ -type d -name "date-*" -printf '%T@ %p\n' | sort -n | head -n -2 | cut -f2- | xargs rm -rf

find打印出目录路径及其最后修改时间。然后对其进行排序,除最后两个之外的所有内容都将被删除。

于 2013-01-29T15:21:59.160 回答