Найти файлы старше X дней, исключая некоторые другие файлы - PullRequest
1 голос
/ 20 декабря 2010

Я пытаюсь написать сценарий оболочки для linux и solaris, который находит определенные файлы старше X дней, а затем удаляет их.Хитрость заключается в том, что во время этого процесса есть несколько файлов, которые не должны быть удалены.

, например, из следующего списка файлов, мне нужно удалить * .zip и сохранить * .log и * .something.*
1.zip
2.zip
3.log
prefix.something.suffix

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

Ответы [ 3 ]

4 голосов
/ 20 декабря 2010

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

find -L path -type f \( -name '*.log' \) -a ! \( -name '*.zip' -o -name '*something*' \) -mtime +3

ура
G

2 голосов
/ 01 ноября 2011

Мне нужно было найти способ предоставить жестко закодированный список исключаемых файлов, чтобы они не удалялись, а удаляли все остальное, что было старше 30 дней. Вот небольшой скрипт для удаления всех файлов старше 30 дней, кроме файлов, перечисленных в [exclude_file].

EXCL_FILES=`/bin/cat [exclude_file]`;
RM_FILE=`/usr/bin/find [path] -type f -mtime +30`;

for I in $RM_FILES;
do
     for J in $EXCL_FILES; 
     do
          grep $J $I;
          if [[ $? == 0 ]]; then
               /bin/rm $I;
               if [[ $? != 0 ]]; then echo "PROBLEM: Could not remove $I"; exit 1; fi;
          fi;
     done;
done;
1 голос
/ 02 ноября 2011

или вы можете сделать это:

find /appl/ftp -type f -mtime +30 |grep -vf [exclude_file] | xargs rm -rf;
...