Как передать вывод из поиска в PDF-просмотра

Привет Баш Супергерои,

Я пытаюсь создать простую функцию bash, которая перенаправляет вывод из find в просмотрщик PDF, похожий, но ограниченный evince.

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

Вышеуказанная функция открывает программу просмотра, но не отображает какие-либо нужные файлы / пути. В конечном счете, я хотел бы отобразить все PDF-файлы, полученные из find. Простая команда поиска, такая как:

$ 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 ответа

Решение

Вам нужен список имен файлов в командной строке 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

Вы также должны быть в состоянии использовать

find /home/alex/papers/ -iname '*erebus*' -exec evince '{}' +
  • iname сообщает find, что данный шаблон поиска не учитывает регистр.
  • -exec выполняет данную команду evince с найденными именами файлов, вставленными для {}. Знак "плюс" указывает, что find добавляет все найденные имена файлов к одной команде evince вместо того, чтобы начинать новый evince для каждого найденного файла. Если вы замените + на точку с запятой (\;), вы получите последнее поведение.

Если вы используете bash 4 или позже, вам не нужно find:

shopt -s globstar
evince /home/alex/papers/**/*erebus*
Другие вопросы по тегам