Удалите весь но новейший файл формата 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

2
задан 20 August 2018 в 21:26

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

Идеи для полных резервных документов на получение могли быть найдены в:

2
ответ дан 2 December 2019 в 03:31

Другие вопросы по тегам:

Похожие вопросы: