2012-09-16 59 views
2

在我的服务器上,日期后有一堆归档文件夹名称:yyyy-mm-jj这允许您轻松地对文件夹进行排序并查找相关数据。如何删除名称小于...的文件夹?

我想删除给定数据之前完成的所有档案。随着我的文件夹命名,自然排序顺序为普通排序一样,这样我可以依靠平时的bash结构:

if [ $foldername -lt "yyyy-mm-jj" ]; then 
    rm -r $foldername 
fi 

有没有更有效的方式来做到这一点?

+2

不,这似乎是最好的办法。为什么,你有什么速度问题? – 2012-09-16 15:07:08

+0

您可以使用find和-mtime来查找旧文件/文件夹。 – Gregor

+0

没有速度问题。我只寻求优雅的结构:) – yadutaf

回答

5

[ $foldername -lt "yyyy-mm-jj" ]将永远是假的,因为-lt是一个数值运算符:你比较字符串不是数字,所以他们都视为0。使用<>操盘比较字符串(这是一个ksh/bash/zsh功能)。请注意,只有字符串运算符,没有<=>=

通配符扩展以字典顺序返回匹配的名称。因此,要对最早的文件执行操作,请循环浏览这些文件,并在找到太近的文件时解决问题。

for dir in [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]; do 
    if ! [[ $dir < $min_date_to_keep ]]; then break; fi 
    rm -r "$dir" 
done 
+2

+1主要是因为这也确保只有正确命名的文件夹被检查,并且风险更小的随机文件夹恰好在词典上小于正在使用的任何目标日期被删除(例如,如果脚本在错误的目录上运行时发生一些错误)。 –

相关问题