使用 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
我目前正在寻找自动备份旧日志文件的方法。
我用 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