删除所有格式为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

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

 $ 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 

完整备份程序的想法可以在以下位置找到: