终端中的unix查找命令不工作

终端中的unix查找命令不工作,unix,terminal,Unix,Terminal,我需要放置一个命令,搜索当前目录及其子目录中的所有文件-以~,和/或以#开头或结尾的所有文件。命令行将显示并删除找到的所有文件。只允许使用一个命令:no';'或&&'或其他恶作剧 这是我的命令: find . -name "#*" -o -name "*#" -o -name "*~" -print -delete 但是它只会删除以~结尾的文件,不如将-print0primary与xargs-0''结合使用,如下所示 find . -type f -print0 | xargs -0

我需要放置一个命令,搜索当前目录及其子目录中的所有文件-以~,和/或以#开头或结尾的所有文件。命令行将显示并删除找到的所有文件。只允许使用一个命令:no';'或&&'或其他恶作剧

这是我的命令:

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

但是它只会删除以~

结尾的文件,不如将
-print0
primary与
xargs-0''
结合使用,如下所示

 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{}
加上你的comand,它做同样的事情

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

编辑:如果使用
find.
看不到以#开头的文件,则文件名中有空格,如#
file.txt
。您需要查找带有空格的文件,如
find-命名“**”
,然后删除空格

您忘记用括号括起条件
()
。这意味着只有最后一个条件才会触发操作
-print
-delete

默认值是and
-a
,这不需要括号,这就是为什么大多数find命令,如
find-type f-name“pattern”-print
都不需要括号

你应该试试:

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

请尝试使用单引号而不是双引号作为名称通配符。有些shell会使用双引号为您进行插值,就像perl和php使用字符串一样。我很确定这不是问题所在。我在这里看到了同样的问题(GNU find 4.4.2)。我不知道问题出在哪里。您忘记将条件包含在parens
()
中。因此,只有最后一个条件触发了
-print
-delete
。尝试
查找\(-name“#*”-o name“*#”-o name“*~”\)-print-delete
@alvits:你应该把它作为答案发布。(现有的答案可以诊断问题,但没有给出解决方案。)@alvits将其作为一个答案,它的效果令人惊讶