2014-02-08 28 views
0

你好猛砸超級英雄,如何管輸出從發現到PDF閱讀器

我想創建一個簡單的bash函數,管道從輸出找到到一個PDF瀏覽器,類似但限於表示出

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。感謝提前堆!

+0

簡單的方法是使用xargs。看[這個問題](http://stackoverflow.com/questions/896808/find-exec-cmd-vs-xargs)。 – BraveNewCurrency

回答

4

你想在evince的命令行上列出文件名,而不是在其標準輸入中。

使用

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

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

在Linux(或使用發現的GNU版本和xargs的任何操作系統),如果有文件名可能包含空格的機會,更好的使用

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

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

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

你也應該能夠使用

find /home/alex/papers/ -iname '*erebus*' -exec evince '{}' + 
  • INAME告訴發現,給出的搜索模式是不區分大小寫。
  • -exec執行給定的命令evince,併爲{}插入找到的文件名。加號告訴find將所有找到的文件名追加到單個evince命令中,而不是爲每個找到的文件啓動一個新的evince。如果你用換行符(\;)替換+,你會得到後一種行爲。