2016-08-02 105 views
2

我需要放置一個命令來搜索當前目錄及其子目錄中的所有文件 - 以〜結尾,和/或所有以開頭或結尾的文件#。命令行將顯示並清除所有找到的文件。只允許使用一個命令:no';'或'& &'或其他惡作劇。unix在終端中查找命令不起作用

這裏是我的命令:

find . -name "#*" -o -name "*#" -o -name "*~" -print -delete 

但只擦除與xargs -0''這樣的結合在〜

+0

嘗試單引號代替雙引號的名稱通配符。有些shell會用雙引號爲你做插值,就像perl和php用字符串做的一樣。 – alzee

+0

我很確定這不是問題。我在這裏看到同樣的問題(使用GNU find 4.4.2)。我不知道問題是什麼。 –

+3

您忘記將條件放在parens'()'中。因此只有最後一個條件觸發'-print'和'-delete'。嘗試'找到。 \(-name「#*」-o name「*#」-o name「*〜」\)-print -delete'。 – alvits

回答

2

您忘記附上括號()的條件。這意味着只有最後一個條件纔會觸發動作-print-delete

默認值是-a,這不需要括號,這就是爲什麼大多數查找命令如find -type f -name "pattern" -print沒有圓括號的原因。

你應該嘗試:

find . \(-name "#*" -o -name "*#" -o -name "*~" \) -print -delete 
0

如何-print0主結尾的文件。

find . -type f -print0 | xargs -0 rm 

za:temp za$ ls 
file.txt file.txt~ 
za:temp za$ find . -name "*~" -print0 | xargs -0 rm 
za:temp za$ ls 
file.txt 

或與xargs -I {}加上你的同樣做同樣的事情。

# xargs -I {} to capture the value of find 
find . -iname *something* | xargs -I {} rm {} 

編輯:如果你不能看到與#中使用find .啓動文件,然後將這些文件有文件(S),如#file.txt的名稱中的空格。您需要找到空間類似find . -name "* *"的文件,然後刪除空格。