Переместить файл журнала старше 2 дней

Я хочу переместить файлы журналов старше двух дней в новый каталог по дате, как показано ниже.

Источник:

1) /Test1/Server.log
2) /Test1/Server17032016.log

Место назначения:

1)/Test2/17032016/Server17032016.log

Создавайте каталоги по дате и перемещайте туда файлы.

0
19.03.2016, 21:35
2 ответа

OP, очевидно, ожидает, что путь, подобный

 /Test1/Server17032016.log

, интерпретируется так, как если бы последние 8 цифр в имени файла были датой (день месяца, месяц и год), и хочет имя каталога, которое будет производным от этой даты.

Сценарий для заданных данных может выглядеть следующим образом:

#!/bin/sh
find /Test1 -type f -mtime +2 | while IFS= read -r name
do
    date=$(echo "$name" | sed -e 's,^/Test1/Server,,' -e 's,\.log$,,' )
    [ -z "$date" ]          && continue
    [ "x$date" = "x$name" ] && continue
    mkdir -p /Test2/"$date"
    mv -f "$name" /Test2/"$date/"
done

хотя может потребоваться некоторая доработка, если файлы журнала не начинаются с буквального Server , а также для исключения файлов, которые не подходят шаблон.

0
28.01.2020, 02:48

Я бы посоветовал вам не выполнять резервное копирование с измененной датой.

Разве вы не предпочли бы сортировать свои резервные копии в тот день, когда они фактически были созданы?

Я знаю, что смогу.

Я бы решил проблему следующим образом

#!/bin/sh

targetDirectory=$2

for file in $1; do 
    if [ -f "$file" ]; then
        if [ $(((`date +%s` - `stat -L --format %Y $file`) > (172800))) -eq 1 ]; then
                today=$(date +"%Y%m%d")
                mkdir -p "$targetDirectory"
                mkdir -p "$targetDirectory/$today"
                mv $file "$targetDirectory/$today"
                echo "$file moved to $targetDirectory/$today/$file"
        fi
    fi
done

(Магическое число 172800, 2 дня в секундах.)

Запустите скрипт следующим образом: $ ./movebackup.sh "/Logfolder/*.log" Backups

Output

Server.log moved to Backups/20160319/Server.log
Server17032016.log moved to Backups/20160319/Server17032016.log

И запускайте его в cronjob в полночь каждый день.

1
28.01.2020, 02:48

Теги

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