2014-05-12 74 views
0

我必須寫一個unix腳本,我真的不熟悉它,需要幫助。Unix腳本來過濾文件

我有一個根目錄,裏面我有很多其他的目錄。 每個目錄包含txt files。 我必須要經過的所有目錄和所有文件:

  • 如果文件包含我希望保持 文件短語"file information"

  • 如果文件不包含它,我要刪除的文件。

  • 然後,如果一個目錄的所有文件都被刪除了,並且目錄是空的,我想刪除這個目錄。

我該怎麼寫這樣的腳本?

感謝

+0

嘗試什麼.. 。? –

+0

哪個命令查找文件或目錄?哪個命令在文件中找到單詞?什麼選項使命令列表文件名稱? 'rmdir'命令很嘈雜,但不會刪除非空目錄。如果按相反順序對目錄列表進行排序,則可以將列表提供給「rmdir」,它將安全地處理所有空目錄。你如何重定向標準錯誤,所以它不會出現? –

回答

0

刪除包含 「STRING」 的所有文件:

rm -rf $(find . -type f -exec grep -l 'STRING' {} \;) 

,並刪除所有empry目錄:

find . -empty -type d -delete 

UPDATE

man grep

-L,--files-不匹配

  Suppress normal output; instead print the name of each input file from which no output would normally have been printed. 
      The scanning will stop on the first match. 

-l,--files與 - 比賽

  Suppress normal output; instead print the name of each input file from which output would normally have been printed. The 
      scanning will stop on the first match. (-l is specified by POSIX.) 
+0

謝謝。 如何刪除所有不包含「STRING」的文件? – user1439691

+0

將'-l'選項改爲'-L' –

+0

謝謝。找到工作正常,但它不會刪除。它寫入「非法變量名稱」。 也許是因爲文件名是try.txt,並找到返回./try.txt? – user1439691