【问题标题】:unix find command in terminal does not work终端中的 unix find 命令不起作用
【发布时间】:2016-08-02 00:59:23
【问题描述】:

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

这是我的命令:

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

但它只会删除以 ~ 结尾的文件

【问题讨论】:

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

标签: unix terminal


【解决方案1】:

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

默认是和-a,不需要括号,这就是为什么大多数查找命令(如find -type f -name "pattern" -print)在没有括号的情况下工作。

你应该试试:

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

【讨论】:

    【解决方案2】:

    -print0primary 和 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 {} 加上你的命令,它做同样的事情。

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

    编辑:如果您看不到以# using find . 开头的文件,则这些文件的文件名中有空格,例如#file.txt。您将需要找到带有find . -name "* *" 之类的空格的文件,然后删除空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-06
      • 2015-03-14
      • 2018-09-01
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多