我有一堆目录。这些目录中有一封求职信和一个 zip 工作档案。我想运行一个快速而简单的查询来打开所有求职信,以便我可以决定是否值得查看工作文件夹。
find . | grep cover\.pdf | xargs open #OS X has open linked to "open" the file
这是行不通的。我也曾尝试过各种变体print0
,xargs -0
但收效甚微。执行此操作的正确方法是什么?
答案1
首先,请务必检查您的 Mac-OSX 机器上实际使用的find
/版本。xargs
也许您期望 BSD/GNU 行为/选项并使用 GNU/BSD 版本。
不知道是否打开支持多个参数。如果没有xargs
这样调用:
xargs -n 1 open
(这意味着 xargs 为每个参数执行一个额外的开放进程)
请记住,如果您的文件名/路径包含空格,则find | xargs
without-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