Macos OSX查找特定路径/组合并删除
我正在使用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”的文件夹 非常感谢您的建议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
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 {} +