Macos OSX查找特定路径/组合并删除

Macos OSX查找特定路径/组合并删除,macos,shell,unix,find,Macos,Shell,Unix,Find,我正在使用OSX,并希望使用Unix“find”命令查找以下任何实例,然后将其删除 /库/应用程序支持/Adobe/Acrobat/10.0 但是,有时它的前缀是: /卷/主页/库/应用程序支持/Adobe/Acrobat/10.0 其他时间: /卷/备份/_rsync-date/Library/Application Support/Adobe/Acrobat/10.0 等等……在文件系统的各个层次上还有许多其他的例子 因此,我希望能够在存在“/Library/Application Supp

我正在使用OSX,并希望使用Unix“find”命令查找以下任何实例,然后将其删除

/库/应用程序支持/Adobe/Acrobat/10.0

但是,有时它的前缀是:

/卷/主页/库/应用程序支持/Adobe/Acrobat/10.0

其他时间:

/卷/备份/_rsync-date/Library/Application Support/Adobe/Acrobat/10.0

等等……在文件系统的各个层次上还有许多其他的例子

因此,我希望能够在存在“/Library/Application Support/Adobe/Acrobat/10.0”组合的任何目录中找到并删除它

是的,我可以使用以下命令删除任何名为“10.0”的目录

但我希望此搜索更加具体,因此我不会删除任何具有该名称的文件夹,而只删除前缀为“/Library/Application Support/Adobe/Acrobat/10.0”的文件夹

非常感谢您的建议


Dan

路径谓词不是标准的,但它肯定存在于OSX上的
find
的BSD版本中

find . -path '*/Library/Application Support/Adobe/Acrobat/10.0' -type d -execdir rm -r {} +
上面的命令将匹配当前目录下与以“10.0”结尾的路径表达式匹配的任何内容,该表达式本身就是一个目录。

$find/-name'10.0'2>/dev/null |
grep“库/应用程序支持/Adobe/Acrobat/10.0$”|
tr'\n'\0'|
xargs-0 rm-rf
讨论要点:

  • 2>/dev/null
    位只会抑制来自
    find(1)
    的噪音,因为它会遍历一个您没有完全访问权限的文件系统,除非您以root用户身份运行它

  • 我在
    grep(1)
    之后使用了
    tr(1)
    而不是
    find-print0
    ,因为
    grep(1)
    不能很好地处理嵌入的空值,所以转换必须在
    grep
    过滤掉不正确的部分匹配之后进行

  • 不要盲目地按原样运行此命令。如果删除末尾的
    rm-rf
    位,
    xargs(1)
    将只打印出它建议操作的路径。在发出命令之前,请确保它将执行您想要的操作,正如我所给出的那样


  • @沃伦杨和沉默的选民:没有看到。。。我改变了答案。这应该行得通。关于“为什么”,请参见我答案中的第2点。它对我来说很好,因为我在这里有它。我不知道怎么做。您是否正在实际的Mac电脑上使用
    应用程序支持下的文件尝试此操作?
    grep
    模式末尾的
    $
    与由
    find-print0
    而不是换行符发出的空字符不匹配。而且,
    grep
    将看到一大团匹配的文件,而不是单独的行,因此即使删除
    $
    ,您仍然有一个问题。现在我看到它是如何工作的。如果名为
    10.0
    的目录是您想要删除的目录,并且您的
    grep
    版本将最后一项与您的模式匹配,它将
    find
    的整个输出发送到
    xargs
    。但是它在OS X上失败了,因为
    grep
    在嵌入空值时会发出一条关于二进制数据的消息,并且在任何情况下,这意味着您可能正在删除名为
    10.0
    的目录,这些目录没有所需的父级。这是一个炸弹,绝对完美,而且优雅。我不知道“路径”的论点。无价的非常感谢。只是好奇-delete是否可以代替“-execdir rm-r{}+”?@我对此表示怀疑。由于安全原因,[-delete]将不会尝试删除路径名中相对于
    ''带有
    /''字符的文件名。
    
    find . -type d -name "10.0" -print0 | 
    grep "Library/Application Support/Adobe/Acrobat/10.0$" | xargs -0 rm -rf
    
    find . -path '*/Library/Application Support/Adobe/Acrobat/10.0' -type d -execdir rm -r {} +