删除除最新格式 08-20-2018_01:24-PM 的文件外的所有文件

删除除最新格式 08-20-2018_01:24-PM 的文件外的所有文件

我使用这个来更容易地查看备份脚本的运行时间。

touch /media/andy/MAXTOR_SDB1/Ubuntu_Mate_18.04/$( date '+%m-%d-%Y_%I:%M-%p' )

我想要一个脚本,可以删除除最新文件之外的所有此类文件 08-20-2018_01:24-PM

答案1

首先我建议使用更容易解析的日期和时间格式。例如:

$ date '+%Y-%m-%d_%H:%M'
2018-08-21_21:41

然后,您可以使用以下内容,仅保留最新的文件(参考):

#!/bin/bash
TARGET_DIR='./'
REGEX='[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}:[0-9]{2}'   # regular expression that match to: date '+%Y-%m-%d_%H:%M'
LATEST_FILE="$(ls "$TARGET_DIR" | egrep "^${REGEX}$" | tail -1)"
find "$TARGET_DIR" ! -name "$LATEST_FILE" -type f -regextype egrep -regex ".*/${REGEX}$" -exec rm -f {} +

如果你想要删除一些超过一段时间的文件,你可以使用如下命令(想法的来源):

#!/bin/bash
TARGET_DIR='./'
MAX_AGE='3 days ago'
AGE="$(date '+%Y%m%d%H%M' --date="$MAX_AGE")"

for file in "$TARGET_DIR"/*
do
    CLR="$(echo $(basename "$file") | sed -e 's/-//g' -e 's/_//g' -e 's/://g')"

    if [[ -f $file ]] && [[ $AGE -ge $CLR ]] 2>/dev/null
    then
        rm -f "$file"
    fi 
done

另一个选项是根据文件的创建日期使用find和删除超过一段时间的文件。例如,下一个命令将删除所有超过 2 天的文件:

find /path/ -mtime +2 -type f -delete

完整备份脚本的想法可在此处找到:

相关内容