2012-04-20 13 views
99

我在BASH腳本中使用rm來刪除許多文件。有時文件不存在,所以報告很多錯誤。我不需要這個消息。我在手冊頁上搜索了一個使rm安靜的命令,但我發現的唯一選擇是-f,它從描述中「忽略不存在的文件,從不提示」似乎是正確的選擇,但名稱似乎不是以適應,所以我擔心它可能會產生意想不到的後果。如何防止rm報告沒有找到文件?

  • -f選項正確的沉默方式rm?爲什麼不叫-q
  • 此選項是否還有其他功能?
+0

您不想使用-f,它將刪除標記爲只讀的文件。 – pizza 2012-04-20 21:29:10

回答

136

的主要用途是-f本身強制刪除使用rm將 不會被刪除的文件(作爲一種特殊情況,它「刪除」 不存在的文件,因此抑制了錯誤消息)。

你也可以使用重定向

$ rm file.txt 2> /dev/null 

(或操作系統的等同物)的錯誤信息。您可以在撥打rm後立即檢查$? 的值,看看文件是否真的被刪除。

+3

'--f'對GNU Coreutils'rm'有效,但僅僅是因爲它恰好是'--force'的唯一縮寫。簡寫形式'-f'更清晰,更便攜。 – 2014-05-28 18:09:05

+0

不知道我甚至意識到這一點。 '--f'這裏只是'-f'的拼寫錯誤。 – chepner 2014-05-28 18:27:05

+3

你沒有修復錯字的任何原因?我要修復它... – iconoclast 2014-06-17 19:23:23

44

是的,-f是最合適的選擇。

+0

有些系統甚至會在-f使用反斜槓時提示您。 – vimdude 2013-06-12 20:13:00

+6

@vimdude:這不是「某些系統」;該行爲表示您有一個shell函數或將'rm'映射到'rm -i'的別名。 – 2014-05-28 18:10:31

+0

@KeithThompson true – vimdude 2014-05-28 22:32:57

3

至於rm -f做「任何東西」,它力(-f--force簡寫)的情況下,靜默式刪除其中rm否則將要求您進行確認。例如,試圖從您可寫入的目錄中刪除不可由您寫入的文件。

8

\rm -f file將永遠不會報告未找到。

+2

-r是不必要的和危險的。 – mahemoff 2013-06-11 21:04:45

+1

我假設了很多文件或目錄。重讀用戶的請求,你是對的,他只是要求文件。所以糾正了我的回答 – vimdude 2013-06-12 20:12:02

+0

rm做什麼之前的反斜槓?請大家,我需要一個答案。在Windows上,cygwin的4.1版本無法處理\ rm,而3.75工作得很好。 – 2017-07-24 10:47:45

16

-f是正確的標誌,但對於測試操作,而不是RM

[ -f "$THEFILE" ] && rm "$THEFILE" 

這確保了文件存在且是一個普通文件(不是目錄,設備節點等)

+2

但是,這有一個競爭條件,不應該在生產腳本中使用。 – tripleee 2014-07-31 06:38:48

+1

那麼應該怎麼做? – mmlac 2016-03-24 08:36:37

-1

我對cshell有同樣的問題。我唯一的解決方案是創建一個與我的腳本中的「rm」之前的模式相匹配的虛擬文件。

+4

這真的是唯一的解決方案嗎?你嘗試過'rm -f'還是'rm filename>&/ dev/null'? – 2014-05-28 18:09:40

相關問題