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