2010-12-20 78 views
1

我正在嘗試爲Linux和solaris編寫一個shell腳本,該腳本會查找一些比X天早的特定文件,然後刪除它們。訣竅是在這個過程中有幾個文件不能被刪除。查找比X天更早的文件,排除其他一些文件

例如從文件下面的列表我需要刪除* .zip或保持* .log和* .something。*
1.zip
2.zip
3.log
prefix.something .suffix

找到文件並將它們提供給rm很容易,但我在從刪除列表中排除文件時遇到困難。

+0

@Grove,我想創建一個腳本,我會養活找到的結果,然後在腳本中,我將包含文件的列表被排除。很簡單,就像'如果不在列表中;那麼rm -rf $ {file} else ... fi' – Anders 2010-12-20 11:02:24

+0

問題是要排除的文件每天都不相同。更具體的他們也是由某些系統生成的日誌文件 – Morfic 2010-12-20 11:33:38

+0

@格羅夫,我仍然沒有看到問題是什麼,你想排除以.log和.something結尾的文件(無論這可能是什麼),使用find並找到這些文件。將它們保存到一個數組,然後做一個查找所有文件,比較數組中的文件與文件查找找到(當搜索所有文件) – Anders 2010-12-20 13:07:54

回答

4

我身邊的實驗發現,一個可以從邏輯運算符這樣的分組多個複雜的表達式中受益:

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

歡呼聲,

+0

由於這解決了問題,因此您應該將其標記爲已接受(可以接受您自己的答案)。 – caf 2010-12-21 00:56:18

+0

是的,我知道,但我必須等2天才能做到這一點;-) – Morfic 2010-12-21 08:40:45

2

我需要找到一種方法來提供一個硬編碼列表排除文件不能刪除,但要刪除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

,或者你可以這樣做:

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