2

こんにちはバッシュスーパーヒーロー、

findからの出力を aa pdf ビューアーにパイプする単純な bash 関数を作成しようとしていますが、同様ですが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

次に、これら 2 つの pdf ファイルをビューアーに表示します。

アイデアや提案はありますか?それが役立つ場合、私はLinux Mintを使用しています。よろしくお願いします!

4

3 に答える 3

5

標準入力ではなく、evince のコマンドラインでファイル名のリストが必要です。

使用する

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

また

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

Linux (または、find と xargs の gnu バージョンを使用する OS) では、ファイル名にスペースが含まれる可能性がある場合は、

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 を開始するのではなく、見つかったすべてのファイル名を 1 つの evince コマンドに追加するように find に指示します。+ をエスケープされたセミコロン (\;) に置き換えると、後者の動作になります。
于 2014-11-14T19:13:44.737 に答える
0

bash4 以降を使用している場合は、必要ありませんfind

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