我正在嘗試爲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