2016-11-07 59 views
1

這是我的shell命令行:這一發現Linux命令不能刪除文件

find /home/ -depth -type f -iname "*php.jpg*" -o -iname "*php.gif*" -o -iname "*php.png*" -o -iname "*php.txt*" -o -iname "*html.jpg*" -o -iname "*html.gif*" -o -iname "*html.png*" -iname "*php3.jpg*" -delete 

我的權限是根。

當我運行這個命令行withdown -delete時,我收到一個文件列表。但是我不能用這個命令刪除文件。

有什麼問題嗎?

+0

'-delete'標誌在所有版本的'find'中都不可用。 – SLePort

回答

0

您可以使用:

find /home/ -depth -type f -iname "*php.jpg*" -o -iname "*php.gif*" -o -iname "*php.png*" -o -iname "*php.txt*" -o -iname "*html.jpg*" -o -iname "*html.gif*" -o -iname "*html.png*" -iname "*php3.jpg*" -exec rm -f {} \; 
1

-delete動作只可在一些find版本(如GNU find)。它是由BSD操作系統推出的。從GNU findutils page

'刪除'行動是由BSD操作系統家族引入的。

可以使用更便攜-exec行動:

find /home/ -depth -type f \(-iname "*php.jpg*" -o -iname "*php.gif*" -o -iname "*php.png*" -o -iname "*php.txt*" -o -iname "*html.jpg*" -o -iname "*html.gif*" -o -iname "*html.png*" -iname "*php3.jpg*" \) -exec rm -f {} \; 

編輯:

請注意,以應用在所有-iname表達式-delete操作,必須將它們分組使用轉義括號:

find /home/ -depth -type f \(-iname "*php.jpg*" -o -iname "*php.gif*" -o -iname "*php.png*" -o -iname "*php.txt*" -o -iname "*html.jpg*" -o -iname "*html.gif*" -o -iname "*html.png*" -iname "*php3.jpg*" \) -delete 
+0

我試過了,沒有任何變化。可能是返回字符串有問題或別的東西。 當我運行comman時:find/home/-depth -type f -iname「* php.jpg *」-delete。它的工作原理,但是當我運行帶有多個名稱的命令。它不起作用。 – Diego

+0

查看我對'-iname'表達式分組的編輯。 – SLePort

2

你可以試試這個;

find /home/ -type f \(-iname "*php.jpg*" -o -iname "*php.gif*" -o -iname "*php.png*" -o -iname "*php.txt*" -o -iname "*html.jpg*" -o -iname "*html.gif*" -o -iname "*html.png*" -iname "*php3.jpg*" \) -delete 

您需要使用括號括住多個名稱;

「建議您附上的文件擴展名的支架, 也使用\(反斜槓)轉義字符作爲命令。」