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

时间:2013-01-29 15:11:12

标签: linux bash shell

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

/ var / www / temp / updates /然后是'date'和'code'

的数百个文件夹

e.g。

/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来获取文件夹,但不确定如何知道我可以删除哪些文件夹,因为脚本必须知道date子文件夹在该子文件夹中的位置以及哪些是最新文件夹

嗯,任何帮助都会很棒?

2 个答案:

答案 0 :(得分:1)

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

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

这会列出按时间ls -dtr排序的所有文件夹,除了最新的head之外的所有文件夹,并删除剩余的文件夹xargs rm -rf

答案 1 :(得分: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打印出目录路径及其上次修改时间。然后对其进行排序,删除除最后两个之外的所有内容。