在我的服务器上,我在日期之后有一堆存档文件夹名称:yyyy-mm-jj
这允许轻松对文件夹进行排序并找到相关数据。
我想删除给定数据之前完成的所有档案。使用我的文件夹命名,自然排序顺序与常规排序相同,因此我可以依赖通常的 bash 构造:
if [ $foldername -lt "yyyy-mm-jj" ]; then
rm -r $foldername
fi
有没有更有效的方法来做到这一点?
在我的服务器上,我在日期之后有一堆存档文件夹名称:yyyy-mm-jj
这允许轻松对文件夹进行排序并找到相关数据。
我想删除给定数据之前完成的所有档案。使用我的文件夹命名,自然排序顺序与常规排序相同,因此我可以依赖通常的 bash 构造:
if [ $foldername -lt "yyyy-mm-jj" ]; then
rm -r $foldername
fi
有没有更有效的方法来做到这一点?
[ $foldername -lt "yyyy-mm-jj" ]
将始终为假,因为-lt
是数字运算符:您要比较的字符串不是数字,因此它们都被视为 0。请使用<
or>
运算符来比较字符串(这是 ksh/bash/zsh 功能) . 请注意,只有字符串运算符,没有<=
or >=
。
通配符扩展按字典顺序返回匹配的名称。因此,要对最旧的文件采取行动,请遍历文件并在发现太新的文件时中断。
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