This question狀態:解讀RM ./-rf「絕招」
令人驚奇的是很多用戶並不瞭解
rm ./-rf
或rm -- -rf
技巧。
我害怕嘗試這些,但對他們做什麼感到好奇。他們也很難搜索...
有人能夠賜教嗎?
This question狀態:解讀RM ./-rf「絕招」
令人驚奇的是很多用戶並不瞭解
rm ./-rf
或rm -- -rf
技巧。
我害怕嘗試這些,但對他們做什麼感到好奇。他們也很難搜索...
有人能夠賜教嗎?
rm ./-rf
和/或rm -- -rf
會試圖刪除一個名爲,具體文件,-rf
唯一招這裏是您通常不能刪除開頭的文件用「 - 」因爲命令會認爲它是一個命令參數。通過在完整路徑之前或使用--
選項(即結束所有選項)前面的文件,命令將不再認爲它是一個參數。
應該指出的是,--
版本招的可能或可能無法正常工作與所有shell命令要麼,所以最好使用的第一個版本。
shell不對命令參數做任何假設;它只是傳遞給他們。它是'rm'命令本身將'-rf'解釋爲控制選項而不是文件名。 –
你是對的@JonathanLeffler,我已經更新了答案以澄清。 – Donovan
如果您的目錄中有一個名爲-rf
的文件,如果您不知道該技巧,則很難刪除該文件。這是因爲:
rm -rf
提供了兩個命令行選項(-r
和-f
)作爲一個參數,並告訴rm
遞歸和強行刪除的東西。
如果你寫:
rm ./-rf
參數不以破折號更多的開始,所以這是一個簡單的文件名。同樣,通過普通的(但不是通用的)約定,--
標誌着選項參數的結束,之後的任何事情都不再是一個選項(通常意味着它是一個文件名)。所以:
rm -- -rf
刪除文件,因爲rm
知道後面的--
參數是文件名,而不是它處理的選項。
rm *rf*
突然,這將刪除目錄以及文件(但不會損害文件-rf
):
文件-rf
如果使用通配符是更加危險。
哇,'rm * rf *'確實不符合我的預期。通配符作爲選項!太可怕了! –
不是一個完整的答案,因爲我認爲其他答案給出了很好的解釋。
當我不能確定什麼給定rm
調用時要刪除,我努力記住簡單ls
文件列表第一,以確保它實際上是我想要刪除的內容:
$ ls -rf -rf .. . $
OK ,很明顯這是不對的,讓我們再試一次:
$ ls ./-rf ./-rf $
這更好。讓我們做一個歷史更換ls
與rm -v
(-v
只是額外的偏執/檢查),做實際刪除:
$ rm -v !!:* rm -v ./-rf removed `./-rf' $
這也與通配符,括號擴展等工作得很好,當你不知道什麼擴張將是完全的。
此外,如果你想知道怎麼樣-rf
文件擺在首位生成,其驚人的容易,如果你陷入困境重定向一點:
$ ls $ echo > -rf $ ls -rf $
「他們也很難搜索...「 - 是的,谷歌往往忽略所有標點符號。但是在另一個SO用戶創建的http://www.symbolhound.com上有一個專門用於標點符號的搜索引擎。搜索'rm - '的結果產生[這個問題](http://stackoverflow.com/questions/2928934/how-to-delete-file-from-svn)作爲第四個結果,其答案解釋了這兩種情況。 – l4mpi