2011-11-01 24 views
2

我有一組文件成對出現的文件:shell腳本最好的方法,以消除不一雙

/var/log/messages-20111001 
/var/log/messages-20111001.hash 

我有這幾條旋轉遠,現在我留下了一噸的/var/log/messages-201110xx.hash文件沒有相關的日誌。我想收拾殘局,但我不確定如何刪除一個文件,是不是「對」的一部分。我可以使用bash或zsh中(或任何LSB工具,真的)。我需要刪除所有不具有關聯的日誌文件.hash。

/var/log/messages-20111001.hash 
/var/log/messages-20111002.hash 
/var/log/messages-20111003.hash 
/var/log/messages-20111004.hash 
/var/log/messages-20111005 
/var/log/messages-20111005.hash 
/var/log/messages-20111006 
/var/log/messages-20111006.hash 

應減少到:

/var/log/messages-20111005 
/var/log/messages-20111005.hash 
/var/log/messages-20111006 
/var/log/messages-20111006.hash 

回答

7
for file in *.hash; do test -f "${file%.hash}" || rm -- "$file"; done 
+0

該訣竅。我不知道$ {file%.hash}的用法。謝謝。 – shadowland

+2

我的文件沒有空格,但是如果他們這樣做了,我認爲'用於* .hash文件;做測試-f「$ {file%.hash}」|| rm「$ file」;完成「將工作 – shadowland

+0

對於心臟的佯攻,請嘗試'mkdir -p/tmp/to_be_discarded;用於* .hash文件;做測試-f「$ {file%.hash}」|| MV - 「$文件」/ tmp目錄/ to_be_discarded;完成'而不是。 –

3

這樣的?

for f in /var/log/messages-????????.hash ; do 
    [[ -e "${f%.hash}" ]] || rm "$f" 
done