0

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

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

但是,有时它的前缀是:

/Volumes/home/Library/Application Support/Adobe/Acrobat/10.0

其他时间:

/Volumes/Backups/_rsync-date/Library/Application Support/Adobe/Acrobat/10.0

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

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

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

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

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

非常感谢您的建议!

4

3 回答 3

1

path谓词不是标准的,但它肯定存在于findOS X的 BSD 版本中。

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

上面的命令将匹配从当前目录向下匹配以“10.0”结尾的路径表达式的任何内容,这就是一个目录本身。

于 2013-09-15T00:50:00.753 回答
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 身份运行它,否则就会出现这种情况。

  2. 我使用tr(1)aftergrep(1)代替,find -print0因为grep(1)它不适用于嵌入的空值,因此必须在grep过滤掉不正确的部分匹配后进行转换。

  3. 不要盲目地按原样运行此命令。如果您rm -rf在最后删除该位,xargs(1)则只会打印出它建议执行的路径。在发出我给它的命令之前,请确保它会做你想做的事。

于 2013-09-15T00:50:18.053 回答
-2
find . -type d -name "10.0" -print0 | 
grep "Library/Application Support/Adobe/Acrobat/10.0$" | xargs -0 rm -rf
于 2013-09-15T00:46:34.317 回答