我需要编写一个递归脚本来删除名为'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子文件夹在该子文件夹中的位置以及哪些是最新文件夹
嗯,任何帮助都会很棒?答案 0 :(得分: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
。
答案 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
打印出目录路径及其上次修改时间。然后对其进行排序,删除除最后两个之外的所有内容。