Bash скрипт для удаления сохранить только последние N файлов - PullRequest
0 голосов
/ 18 октября 2019

У меня есть несколько файлов журналов, и я хотел бы сохранить только последние 3 (N) файла, самые последние. Как вы делаете это в Bash элегантно?

У меня есть этот скрипт, но он довольно длинный.

Файлы могут быть что-то вроде:

my-file-pattern.log.2019-10-01
my-file-pattern.log.2019-10-02
my-file-pattern.log.2019-10-03
and so on

Мой скрипт:

#!/bin/bash
function keepLastNOnly(){
    local WORKDIR="$1"
    local PATTERN="$2"
    local MAX=$3
    cd $WORKDIR 
    COUNT=$(ls -t $WORKDIR | grep $PATTERN|wc -l|grep -o -E '[0-9]+')
    while [ $COUNT -gt $MAX ]; do
        local TODEL=$(ls -t $WORKDIR | grep $PATTERN |tail -n 1)
        rm -rf "$TODEL"
        COUNT=$(ls -t $WORKDIR | grep $PATTERN|wc -l|grep -o -E '[0-9]+')
    done
}
keepLastNOnly "/MyDirectory/" "my-file-pattern.log" 3

Есть более короткий путь?

Ответы [ 2 ]

2 голосов
/ 18 октября 2019

рассмотрите возможность использования logrotate, который сделает все это за вас, вам просто нужно настроить его:

https://linux.die.net/man/8/logrotate

1 голос
/ 18 октября 2019

Придерживаясь стиля вопроса:

#!/bin/bash

function keepLastNOnly() {
    local WORKDIR="$1"
    local PATTERN="$2"
    local MAX=$3

    for file in `ls -t1 $WORKDIR | grep $PATTERN | head -n -3`; do
       rm $file
    done
}

Подсказка - флаг -n -3 для заголовка.

Обратите внимание, что в этой версии будут храниться последние измененные файлы, а непоследний в соответствии с именем файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...