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

时间:2013-09-15 00:35:22

标签: macos shell unix find

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

/ Library / Application Support / Adob​​e / Acrobat / 10.0

然而,有时它是前缀:

/ Volumes / home / Library / Application Support / Adob​​e / Acrobat / 10.0

Othertimes:

/ Volumes / Backups / _rsync-date / Library / Application Support / Adob​​e / Acrobat / 10.0

等等...在文件系统的各个级别还有许多其他示例。

所以我希望能够在任何存在“/ Library / Application Support / Adob​​e / Acrobat / 10.0”组合的目录中找到并删除它。

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

find . -type d -name "10.0" -exec rm -rf {} \;

但是我希望这个搜索更具体,所以我不会删除任何带有该名称的文件夹,只有文件夹前缀为“/ Library / Application Support / Adob​​e / Acrobat / 10.0”

您的建议最受赞赏!

3 个答案:

答案 0 :(得分:1)

path谓词不是标准的,但它确实存在于OS X上的find的BSD版本上。

find . -path '*/Library/Application Support/Adobe/Acrobat/10.0' -type d -execdir rm -r {} +

以上命令将匹配当前目录中与“10.0”中路径表达式结尾匹配的任何内容,并且该目录本身就是。

答案 1 :(得分:0)

$ find / -name '10.0' 2> /dev/null | 
  grep 'Library/Application Support/Adobe/Acrobat/10.0$' |
  tr '\n' '\0' |
  xargs -0 rm -rf

讨论要点:

  1. 2> /dev/null位只会抑制来自find(1)的噪音,因为它是通过您无法完全访问的文件系统行走的,除非您以root用户身份运行它。 / p>

  2. 我在tr(1)之后使用了grep(1)而不是find -print0,因为grep(1)对嵌入的空值不起作用,因此转换必须在之后发生grep过滤掉了不正确的部分匹配。

  3. 不要盲目地按原样运行此命令。如果您最后删除rm -rf位,xargs(1)将打印出它建议操作的路径。在发出命令之前,请确保它会按照您的要求执行操作。

答案 2 :(得分:-2)

find . -type d -name "10.0" -print0 | 
grep "Library/Application Support/Adobe/Acrobat/10.0$" | xargs -0 rm -rf