2

你好 Bash 超级英雄,

我正在尝试创建一个简单的 bash 函数,将输出从find管道传输到 pdf 查看器,类似但仅限于evince

function findpapers {
    find ~/papers/ -name *$1* | evince 
}

上述函数打开查看器,但不显示任何所需的文件/路径。最终,我想显示从find输出的所有 pdf 文件。一个简单的查找命令,例如:

$ find /home/alex/papers/ -name *erebus*

创建如下输出:

/home/alex/papers/2000/rowe/seismic_and_acoustic_observations_at_mount_erebus_volcano_ross_island_antarctica.pdf

/home/alex/papers/2008/Jones/infrasonic_tracking_of_large_bubble_bursts_and_ash_venting_at_erebus_volcano_antarctica.pdf

然后的想法是在查看器中显示这两个 pdf 文件。

有什么想法或建议吗?如果有帮助,我正在使用 Linux Mint。提前致谢!

4

3 回答 3

5

您需要 evince 命令行上的文件名列表,而不是其标准输入。

利用

evince $(find /home/alex/papers/ -name *erebus*)

或者

find /home/alex/papers/ -name *erebus* | xargs evince

在 linux(或任何使用 gnu 版本的 find 和 xargs 的操作系统)上,如果文件名可能包含空格,最好使用

find /home/alex/papers/ -name *erebus* -print0 | xargs -0 evince
于 2014-02-08T19:23:03.787 回答
1

您还应该能够使用

find /home/alex/papers/ -iname '*erebus*' -exec evince '{}' +
  • iname 告诉 find 给定的搜索模式不区分大小写。
  • -exec 使用为 {} 插入的找到的文件名执行给定的命令 evince。加号告诉 find 将所有找到的文件名附加到单个 evince 命令,而不是为每个找到的文件启动一个新的 evince。如果将 + 替换为转义的分号 (\;),则会得到后一种行为。
于 2014-11-14T19:13:44.737 回答
0

如果您使用的是bash4 或更高版本,则不需要find

shopt -s globstar
evince /home/alex/papers/**/*erebus*
于 2014-02-08T20:47:14.070 回答