基于文件名中的日期删除和tar文件

时间:2018-03-28 10:16:14

标签: bash unix sh

我需要帮助将以下文件存档在文件名中的日期。我还要在100天后删除存档。例如,我试图存档所有csv ... 2018,保存存档100天。我试图删除

AUSDUVZRO1Y_pm00hr_20180309.000005_6.csv
KYXMNCDTO6Y_pm00hr_20180309.040006_10.csv

example: 
 11randomletters_6randomalphanumeric_YYYYMMDD.randomnumbers_randomnum.csv

我尝试过以下示例,但无效。有人可以帮我解决这个问题吗?

    #!/bin/bash
DEST_DIR=/tmp/arc/
OLD_FILES=$(date --date="30 days ago" +%s)
    echo "$(date -u) START OF ARCHIVE SCRIPT "  >> "${LOGS}"
        for files in /tmp/archive/*.csv; do
        DIFF=$(date --d="$(echo "$files" | cut -d_ -f3 | cut -d. -f1)" +%s)
        if [ "$DIFF" -lt "$OLD_FILES" ]; then
        tar --create --gzip --file="$DEST_DIR$files -P $SRC_DIR"
        fi
        done

摘要:例如今天的日期是2018年3月27日。我想归档2018年3月20日收到的所有csv文件。同时保存此归档100天并删除每天100天的归档文件。 注意:文件需要根据文件名中的日期进行存档,而不使用find mtime +30 days

我无法帮助自己实现这一目标。

1 个答案:

答案 0 :(得分:1)

将您要存档的档案和csv放在tmp下100天是个不错的主意。找到另一个地方。我假设,变量topdir将是您的新顶级目录。

其余的,就像你说你想要它一样。

date_to_archive=$(date  --date="7 days ago" '+%Y%m%d')
date_to_del=$(date --date="100 days ago" '+%Y%m%d')

#I want to archive all the files csv files received on 20th March 2018
tar cvzf "$topdir"/arc/$date_to_archive.tgz "$topdir"/archive/*_$date_to_archive.*.csv

#delete the archive every day which is 100 days old
rm "$topdir"/arc/$date_to_del.tgz

如果你每天都在cron中运行

   23    23  *   *   *  /bin/bash /where/the/script/is

那不会做你想要的吗?