Как передать вывод из поиска в 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*