Немного короче, если имеется больше типов файлов, с использованием раскрытия фигурных скобок
cp -r source_directory/*.{png,jpg,jpeg} target_directory
Это выдает ошибку всякий раз, когда файл определенного типа не существует. см.https://serverfault.com/a/153893
Добавьте 2>/dev/null
, чтобы скрыть эти ошибки
Добавьте || :
, чтобы не вызывать код выхода
.
cp -r source_directory/*.{png,jpg,jpeg} target_directory 2>/dev/null || :
Возможно, я что-то здесь упускаю — Я никогда не слышал оfzf
(или zathura
, если уж на то пошло ). прежде чем я увидел этот вопрос, и у меня нет их в моей системе для тестирования. Но ... разве смысл fzf
не в том, чтобы выбрать элемент из списка? Позвольте мне перефразировать это :Разве смысл fzf
не в том, чтобы выбратьодинэлемент из списка? Разве xargs
здесь не перебор? Разве это не логика в основном
select a man page
and then display it
?
Страница fzf
на GitHub предлагает использовать $(fzf args)
. Следующее должно работать:
mp=$(man -k. | fzf -e --tiebreak=begin | awk '{print $1}') && [ -n "$mp" ] &&
man -Tpdf "$mp" | zathura - &
прочитать выбранную пользователем справочную страницу -из пользовательского ввода , а затемотобразите его. Нет необходимости в (явном )временном файле. (Добавьте 2> /dev/null
, если считаете, что это полезно.)
Я «решил» свою проблему, перенаправив вывод в свой каталог /tmp/, а затем zathura прочитал оттуда. Я также поместил все это в сценарий.
#!/bin/sh
d=$(date +'%M_%S');
man -k. | fzf -e --tiebreak=begin | awk '{print $1}' | xargs man -Tpdf > /tmp/man_${d};
zathura /tmp/man_${d} 2> /dev/null &
РЕДАКТИРОВАТЬ :Не совсем решение, пожалуйста, не используйте это
В этом весь смысл конвейерных линий для одновременного запуска команд с конвейерами между ними.
Для последовательного выполнения команд вам потребуются конвейеры бесконечного размера или прибегнуть к сохранению вывода во временных файлах.
С помощью zsh
это можно сделать с помощью:
zathura =(
man -k. |
fzf -e --tiebreak=begin |
awk '{print $1}' |
xargs -rd '\n' man -Tpdf
)
(здесь добавлены параметры -r
и -d '\n'
, специфичные для GNU -, поскольку нам не нужен режим синтаксического анализа по умолчанию xargs
и мы не хотим запускать man
, если нет ввода ).
Где =(cmd)
расширяется до пути к временному файлу, который содержит вывод cmd
после того, как cmd
вернул (третью форму подстановки процесса , характерную дляzsh
). Временный файл автоматически удаляется после возврата команды zathura
.