使用查找命令

使用查找命令

我有一堆目录。这些目录中有一封求职信和一个 zip 工作档案。我想运行一个快速而简单的查询来打开所有求职信,以便我可以决定是否值得查看工作文件夹。

find . | grep cover\.pdf | xargs open    #OS X has open linked to "open" the file

这是行不通的。我也曾尝试过各种变体print0xargs -0但收效甚微。执行此操作的正确方法是什么?

答案1

首先,请务必检查您的 Mac-OSX 机器上实际使用的find/版本。xargs也许您期望 BSD/GNU 行为/选项并使用 GNU/BSD 版本。

不知道是否打开支持多个参数。如果没有xargs这样调用:

xargs -n 1 open

(这意味着 xargs 为每个参数执行一个额外的开放进程)

请记住,如果您的文件名/路径包含空格,则find | xargswithout-print0/-0预计会失败。

啊哈,如果你使用类似的东西

find -print0 | grep something | xargs -0 foo

然后grep被所有的角色弄糊涂了\0

GNU grep(至少)知道这个-z选项。因此,应该起作用的是:

find -print0 | grep -z something | xargs -0 foo

通过以下方式检查grep您使用的版本

grep --version

或者检查您的手册页grep以获取\0(零字符)支持。

答案2

这应该有效:

寻找 。 -name cover\.pdf -exec open '{}' \;

你可以这样测试:

寻找 。 -name cover\.pdf -exec ls -l '{}' \;

不确定 OSX 上的手册页是什么样子,但如果您搜索示例,则在查找手册页中有各种示例。我经常发现自己通过检查这些来刷新我的大脑。

答案3

如果系统上的 xargs 支持 -n 选项,您可以尝试以下操作。

find . | grep cover\.pdf | xargs -n 1 open

相关内容