2014-12-02 71 views
-2

我們的應召職員意外刪除了我們的生產服務器中的文件。找不同。 -name'* .xyz'(點空格連字符)並查找。 .name'* .xyz'(點空格點)

我指示他發出find命令來刪除像這樣流浪文件(注意find dot space hyphen

find . -name '*.xyz' -exec rm '{}' \; 

但隨着他複製/從我的電子郵件粘貼命令他的shell會話,連字符改爲點(我親眼目睹了他拿給我),下面的命令被執行(通知find dot space dot

find . .name '*.xyz' -exec rm '{}' \; 

這本地和遞歸刪除的文件。包括符號鏈接。謝天謝地,我們能夠從備份中恢復所有內容。

我服務器上的手冊頁只有-name標誌。沒有關於.name。爲什麼find忽略我指定的文件擴展名?

我們的Red Hat Enterprise Linux服務器上釋放5.10(Tikanga),運行KSH 93

+0

沒有什麼特別的'.'s。 – simonzack 2014-12-02 15:39:17

回答

1

如果你明白爲什麼program A B C被解釋爲與program A -B C不同,那麼你就會明白髮生了什麼。

find而言,您從未指定過擴展名,因爲您從未使用過-name標誌。將.name解釋爲搜索路徑,就像.一樣。 find可以讓你像specify multiple paths那樣。您告訴find要搜索名爲.的文件和目錄,名​​爲.name的文件和目錄以及名爲'*.xyz'的文件和目錄,並刪除所有內容。

3

在實踐中找到搜索從..name,並且'.xyz'開始的所有文件,解釋這些的路徑,可能是最後兩個給出瞭如下錯誤消息:

find: `.name': No such file or directory 
find: `*.xyz': No such file or directory 

然後對這些執行rm命令。

相關問題