Linux 递归脚本按名称删除除2以外的所有文件夹

Linux 递归脚本按名称删除除2以外的所有文件夹,linux,bash,shell,Linux,Bash,Shell,我需要编写一个递归脚本来删除名为“date-2012-01-01_12_30”的子文件夹中的所有文件夹,但保留两个最新文件夹 /var/www/temp/updates/然后按“日期”和“代码”列出数百个文件夹 e、 g 我正在考虑使用查找来获取文件夹,但不确定如何知道可以删除哪些文件夹,因为脚本必须知道该子文件夹中的日期文件夹以及哪些文件夹是最新的 嗯,有什么帮助吗?如果所有文件夹都在子目录temp1,temp2,…,您可以使用ls-tr ls -dtr /var/www/temp/updat

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

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

e、 g

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


嗯,有什么帮助吗?

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

ls -dtr /var/www/temp/updates/2012-01-01/temp*/* | head -n -2 | xargs rm -rf
这将列出按时间排序的所有文件夹
ls-dtr
,除了两个最新的
之外,其余文件夹都将被删除
xargs rm-rf

,这应该可以:

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

find
打印目录路径及其上次修改时间。然后对其进行排序,并删除除最后两个之外的所有文件夹。

实际上,所有文件夹的日期都不同,并使用唯一代码命名。。。大概10万吧folders@Grimlockz这对命令行来说太多了。您必须按照dogbane的建议使用查找和排序。你的意思是什么唯一代码?嗨,所有日期文件夹的名称都不同,因此在一个名为date的子文件夹中至少有五个不同的文件夹-(创建文件夹时)我的命令应该仍然有效。
find
命令将在
/var/www/temp/updates/
中的所有目录下递归查找。我已将其更改为echo to test,但未显示任何内容。。。我做错了什么吗?我已将查找更改为此以使其正常工作-键入d-name date-*-printf'%T@%p\n'-exec echo'{}\\;|排序-n |头-n-2@Grimlockz您必须将echo添加到
xargs
进行测试:
find/var/www/temp/updates/-type d-name“date-*”-printf“%T@%p\n”| sort-n | head-n-2 | xargs echo rm-rf
find /var/www/temp/updates/ -type d -name "date-*" -printf '%T@ %p\n' | sort -n | head -n -2 | cut -f2- | xargs rm -rf