在Linux和OSX中,关于-execdir的解释

3
find . -iname '*.rar' -execdir ls {} +

这在OSX Lion下无法正常工作,会产生类似于ls: blabla.rar: No such file or directory的错误。

此外,在Linux下上述命令可以正常工作。但是,它会像查找结果一样多次调用ls。使用简单的cat $#脚本进行测试。

所以我看到了两个-execdir的问题:

  • 在Linux下,当使用{} +时,它不会像手册中所述那样组合搜索结果。
  • 在OSX下,当使用{} +时,它不会像手册中所述那样更改目录。

想要确认这是否存在Bug,而不是我的误解。

2个回答

3

听起来症状相同,最初尝试使用pwd,但无法更改目录。甚至不确定如何在Lion上检查findutil版本...“--version”无效。 - Pablo
@Pablo 如果它不响应 --version,那就不是 GNU find;它很可能是 FreeBSD find。我手头上已经没有 Mac 或 FreeBSD 了,所以无法帮助你,但你可以尝试在 Google 上搜索 FreeBSD 的错误报告。 - rici

0

在Linux上,ls是针对每个文件还是每个子目录执行一次?来自man find(GNU findutils版本4.4.2)的说明:

-exec操作一样,-execdir的‘+’形式将构建一个命令行以处理多个匹配的文件,但任何给定的命令调用只会列出存在于同一子目录中的文件。


我刚在Linux上尝试将文件放在同一个子目录下。但是我发现echo $#每个文件都会有一次调用,没有合并。 - Pablo
find . -iname "*.asd" -execdir test.sh {} + 是测试脚本。test.sh 包含 echo $# - Pablo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接