0

好的,所以我要做的是,我所有的备份文件夹都命名为日期 03-07-13。所以我试图选择这一天,如果它大于或等于 7 天,它将被删除。这是我到目前为止所拥有的,但它不起作用。

DATE=$(date +"%d")

for i in /media/backupdrive/*; do
    DAY=${i:22:2}
    if [ "$DAY" -ge "7" ]
    then
        echo "day greater than 7";
    fi
done

22:2 切断 /media/backupdrive/00-

00 代表月份

现在它只是检查它是否大于 7,如果是,它会打印出来。

编辑:问题已解决。我要感谢大家帮助 bash 初学者。再次感谢你!

4

3 回答 3

1

根据评论中给出的屏幕截图,您的实际代码使用以下内容:

DAY=${i:22:2}
if [ "$day" -ge "7" ]

DAY强调和之间的大小写差异$day。当它运行时,它会尝试将空字符串与字符串(或通过 的“数字” -ge)进行比较,将导致您收到错误。

尝试更新您的if语句以使用大写版本:

if [ "$DAY" -ge "7" ]
于 2013-03-07T19:45:55.340 回答
1

您似乎想删除超过 7 天的文件。该find命令可以为您找到这些文件,并可选择删除它们:

find /media/backupdrive -mtime +7         # Files that are older than 7 days
find /media/backupdrive -mtime +7 -delete # ... and delete them
于 2013-03-07T19:49:08.633 回答
0

使用“DAY”变量会使您面临“刚刚结束”的问题。

一些替代方案:

  • 更改文件夹格式,使其更具描述性。
  • 在每个文件夹中添加一个元文件,该文件提供一个更易于解析和使用的时间值。
  • 具有包含所述数据的备份文件夹的索引。

我通常使用的时间格式包含以下内容:

   [epoch seconds]-[YYYY][MM][DD]-[HH]:[MM]:[SS]

这使您可以执行诸如请求从现在起 7 天前的备份之类的操作。您将根据纪元秒数进行数学计算,这避免了天数滚动的混乱。

基本上,纪元秒是为了使时间计算更容易。其他时间戳位使其易于阅读。排序使其在文件夹列表中正确排序。

编辑:

如果您的备份路径发生变化:

  DAYtmp=${i: -8:5}
  DAY=${DAYtmp: -2}

如果父路径的长度发生变化,这将从文件夹名称中生成 DAY。

于 2013-03-07T19:40:59.813 回答