我正在尝试为Linux和solaris编写一个shell脚本,该脚本会查找一些比X天早的特定文件,然后删除它们。诀窍是在这个过程中有几个文件不能被删除。查找比X天更早的文件,排除其他一些文件
例如从文件下面的列表我需要删除* .zip或保持* .log和* .something。*
1.zip
2.zip
3.log
prefix.something .suffix
找到文件并将它们提供给rm很容易,但我在从删除列表中排除文件时遇到困难。
我正在尝试为Linux和solaris编写一个shell脚本,该脚本会查找一些比X天早的特定文件,然后删除它们。诀窍是在这个过程中有几个文件不能被删除。查找比X天更早的文件,排除其他一些文件
例如从文件下面的列表我需要删除* .zip或保持* .log和* .something。*
1.zip
2.zip
3.log
prefix.something .suffix
找到文件并将它们提供给rm很容易,但我在从删除列表中排除文件时遇到困难。
我需要找到一种方法来提供一个硬编码列表排除文件不能删除,但要删除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;
,或者你可以这样做:
find /appl/ftp -type f -mtime +30 |grep -vf [exclude_file] | xargs rm -rf;
@Grove,我想创建一个脚本,我会养活找到的结果,然后在脚本中,我将包含文件的列表被排除。很简单,就像'如果不在列表中;那么rm -rf $ {file} else ... fi' – Anders 2010-12-20 11:02:24
问题是要排除的文件每天都不相同。更具体的他们也是由某些系统生成的日志文件 – Morfic 2010-12-20 11:33:38
@格罗夫,我仍然没有看到问题是什么,你想排除以.log和.something结尾的文件(无论这可能是什么),使用find并找到这些文件。将它们保存到一个数组,然后做一个查找所有文件,比较数组中的文件与文件查找找到(当搜索所有文件) – Anders 2010-12-20 13:07:54