2

在我的服务器上,我在日期之后有一堆存档文件夹名称:yyyy-mm-jj这允许轻松对文件夹进行排序并找到相关数据。

我想删除给定数据之前完成的所有档案。使用我的文件夹命名,自然排序顺序与常规排序相同,因此我可以依赖通常的 bash 构造:

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

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

4

1 回答 1

5

[ $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
于 2012-09-16T15:25:57.357 回答