2012-05-10 90 views

回答

5

ls -l命令給出了當前目前工作目錄(PWD)中所有子目錄的列表。

rm命令可以刪除多個文件/目錄,如果您將它們作爲列表傳遞給它。

如:rm test1.txt test2.txt myApp將刪除所有這三個文件的名稱用:

test1.txt 
test2.txt 
myApp 

而且,您使用的rm命令標誌在許多愚蠢是常見的。
rm -f - 強制刪除文件沒有要求或確認
rm -r - 遞歸處理所有子目錄,並刪除所有的內容和子目錄

所以,讓我們說你是在/ home /用戶,並且目錄結構如下所以:

/home/user 
|->dir1 
|->dir2 
`->file1.txt 

ls -l命令將提供包含"dir1 dir2 file1.txt"名單,並命令ls -l | xargs rm -rf的結果會是這樣的:
rm -rf dir1 dir2 file1.txt

如果我們用上面的例子拓展你原來的問題,獲取傳遞到系統中的最後一個命令就變成了: rm -rf di1 dir2 file1.txt bark.*

所以,一切都在當前目錄中被消滅了,所以bark.*是多餘的(你實際上告訴機器銷燬當前目錄中的所有內容)。

我想你的意思做的是刪除當前目錄下的所有文件所有子目錄與bark.開始要做到這一點(遞歸),你只需要做:
find -iname bark.* | xargs rm

上述手段的命令「查找此目錄和子目錄中的所有文件,忽略以」bark「字符開頭並刪除它們的大寫/小寫/ mIxEdCaSe。如果您有錯別字,這可能仍然是一個糟糕的命令,所以可以肯定的是,在進行像這樣的批量刪除之前,您應該始終進行測試。

將來,首先執行以下操作,獲取您將首先刪除的所有文件的列表,以確認它們是您要刪除的文件。
find -iname bark.* | xargs echo

然後,如果你確信,通過
find -iname bark.* | xargs rm

希望這有助於將它們刪除。

作爲一個幽默的音符,最有名的例子之一「室射頻」可以在這裏找到: https://github.com/MrMEEE/bumblebee-Old-and-abbandoned/commit/a047be85247755cdbe0acce6f1dafc8beb84f2ac

自動腳本運行像rm -rf /usr/local/.........,但由於意外插入空格,命令成爲rm -rf /usr /local/......,所以這實際上意味着「刪除所有以usr或本地開頭的根文件夾」,有效地銷燬使用它的任何人的系統。我對那個開發者感到不好。

您可以通過引用你的字符串,即避免這些類型的bug: rm -rf "/usr/ local/...."會提供一個錯誤信息,避免這種錯誤,是因爲報價意味着他們之間的一切是完整路徑,而不是一個單獨的路徑列表/文件(例如:你告訴rm該文件/文件夾名稱中包含SPACE字符)。

10

-r參數表示「遞歸刪除」(即,下降到子目錄中)。 -f命令的意思是「強制」(換句話說,不要求確認)。 -rf表示「遞歸下降到子目錄而不要求確認」

ls -l列出目錄中的所有文件。 xargs需要從ls -l輸入,並將其添加到命令傳遞給xargs

是得到了執行這個樣子的最後的命令:

rm -rf bark.* <output of ls -l> 

這基本上去除bark.*所有文件在當前目錄。故事的道德:非常小心rm -rf。 (您可以在刪除文件之前使用rm -ri來詢問)

6

rm(1)刪除當前工作目錄中的每個文件和目錄,因爲您已經提示它。

要大致看看發生了什麼事,這條命令:

cd /etc ; ls -l | xargs echo 

小心留意輸出。

我強烈建議在構建命令行時使用echo代替rm -rf。只有在輸出看起來不錯的情況下,你纔可以用rm -rf重新運行命令。如有疑問,也許只需使用rm -r,以免意外吹走太多。 rm -ir如果你對非常感興趣對你的命令行持懷疑態度。 (我一直在使用Linux的自1994年以來,建設稍複雜的命令行的時候有選擇地刪除了一堆文件,我仍然使用這個echo招。)

順便說一句,我會避免以任何方式解析ls(1)輸出 - 文件名可以包含任意字符,除了ASCII NUL/字符 - 包括換行符,製表符和輸出看起來ls -l輸出。試圖解析這與工具,如xargs(1)可能是危險的。

相反,使用find(1)這些東西。刪除所有文件名爲bark.*所有目錄,我會像這樣運行命令:

find . -type d -name 'bark.*' -print0 | xargs -0 rm -r 

同樣,我會使用echo代替rm -r對於首次執行 - 如果它看起來很好,然後我會重新運行rm -r

+0

現在,然後我發現自己的系統上沒有找到'和-print0'配對'xargs的-0'。非常非常煩人。我認爲Solaris可能是一個這樣的殘疾人士。 – tchrist