我正在使用OSX,并希望使用Unix'find'命令查找以下任何实例,然后将其删除。
/ Library / Application Support / Adobe / Acrobat / 10.0
然而,有时它是前缀:
/ Volumes / home / Library / Application Support / Adobe / Acrobat / 10.0
Othertimes:
/ 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”
您的建议最受赞赏!
丹
答案 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
讨论要点:
2> /dev/null
位只会抑制来自find(1)
的噪音,因为它是通过您无法完全访问的文件系统行走的,除非您以root用户身份运行它。 / p>
我在tr(1)
之后使用了grep(1)
而不是find -print0
,因为grep(1)
对嵌入的空值不起作用,因此转换必须在之后发生grep
过滤掉了不正确的部分匹配。
不要盲目地按原样运行此命令。如果您最后删除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