如何将输出从find输出到pdf viewer

时间:2014-02-08 19:15:21

标签: linux bash pdf find bash-function

Hello Bash Superheros,

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

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

上述功能可打开查看器,但不显示任何所需的文件/路径。最后,我想显示从查找输出的所有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。谢谢你提前!

3 个答案:

答案 0 :(得分:4)

你想在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

答案 1 :(得分:1)

你也应该可以使用

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

答案 2 :(得分:0)

如果您使用bash 4或更高版本,则不需要find

shopt -s globstar
evince /home/alex/papers/**/*erebus*