使用 bash 根据文件名(日期)移动日志文件

Move logfiles based on filename (date) with bash

我目前正在寻找自动备份旧日志文件的方法。 我用 find 尝试了很多,但它似乎只能按编辑日期进行。 试过这个:

find /tmp/logtest -ctime +14 | xargs -I '{}' mv {} /mnt/archive

我要找的是根据文件名移动。

我的文件夹是这样的

.
├── 20200901.cq4.gz
├── 20200902.cq4.gz
├── 20200903.cq4.gz
├── 20200904.cq4.gz
├── 20200905.cq4.gz
├── 20200906.cq4.gz
├── 20200907.cq4.gz
├── 20200908.cq4.gz
├── 20200909.cq4.gz
├── 20200910.cq4.gz
├── 20200911.cq4.gz
├── 20200912.cq4.gz
├── 20200913.cq4.gz
├── 20200914.cq4.gz
├── 20200915.cq4.gz
├── 20200916.cq4.gz
├── 20200917.cq4.gz
├── 20200918.cq4.gz
├── 20200919.cq4.gz
├── 20200920.cq4.gz
├── 20200921.cq4.gz
├── 20200922.cq4.gz
├── 20200923.cq4.gz
├── 20200924.cq4.gz
├── 20200925.cq4.gz
├── 20200926.cq4.gz
├── 20200927.cq4.gz
├── 20200928.cq4.gz
├── 20200929.cq4.gz
├── 20200930.cq4.gz
├── 20201001.cq4.gz
├── 20201002.cq4.gz
├── 20201003.cq4.gz
├── 20201004.cq4.gz
├── 20201005.cq4.gz
├── 20201006.cq4
├── chrongzip.sh

所有文件都在方案 YYYYMMDD.cq4.gz 中标有日期(它们将在 1 天后压缩)。 我想要做的是将超过 14 天的文件移动到 /mnt/archive。 有没有简单的方法可以做到这一点?

我建议这样:

date="$(date -d "14 days ago" "+%Y%m%d")"
for file in 2*.cq4.gz; do [ "${file%%.*}" -gt "$date" ] || mv -- "$file" /mnt/archive/; done

您可以编写一个脚本,从文件名中提取日期并将其与当前日期进行比较(以秒为单位进行比较):

    #!/bin/sh

    CUR_DATE_S=`date +%s`

    MAX_DIFF_S=`expr 14 \* 24 \* 3600`

    ls *.cq4.gz | while read fname
    do
      FILE_DATE=`echo $fname | cut -d. -f1`
      FILE_DATE_S=`date +%s --date ${FILE_DATE}`
      DIFF_S=`expr ${CUR_DATE_S} - ${FILE_DATE_S}`

      if [ ${DIFF_S} -gt ${MAX_DIFF_S} ]
      then
        echo Archive $fname
      fi
    done