【问题标题】:how to pipe output from find to pdf viewer如何将输出从find管道传输到pdf查看器
【发布时间】:2014-02-08 19:15:21
【问题描述】:

你好 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。提前致谢!

【问题讨论】:

标签: linux bash pdf find bash-function


【解决方案1】:

您希望在 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

【讨论】:

    【解决方案2】:

    你应该也可以使用

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 1970-01-01
        • 2017-01-18
        • 1970-01-01
        • 1970-01-01
        • 2016-02-13
        相关资源
        最近更新 更多