开发者

Find files older than X days excluding some other files

i'm trying to write a shell script, for linux and solaris, that finds some specific files older than X days and then deletes them. the trick i开发者_开发百科s that during this process there are a couple of files that must not be deleted.

for example from the following list of files i need to delete *.zip and keep *.log and *.something.*

1.zip

2.zip

3.log

prefix.something.suffix

finding the files and feeding them to rm was easy, but i'm having difficulties in excluding the files from the deletion list.


experimenting around i discovered one can benefit from multiple complex expressions grouped with logical operators like this:

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

cheers,
G


or you could do this:

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


I needed to find a way to provide a hard coded list of exclude files to not remove, but remove everything else that was older than 30 days. Here is a little script to perform a remove of all files older that 30 days, except files that are listed in the [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;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜