У меня проблема с трубопроводом в Linux,

ls | grep feedback

У меня есть псевдоним для xdg-open, который открыт, как можно сделать, чтобы имя файла из grep перешло прямо в open

Это не работает

ls | grep feedback | open

1 ответ1

5

xargs строит и выполняет командные строки из стандартного ввода.

Синтаксис прост:

ls | grep feeback | xargs open

Это не будет работать, если имя файла содержит пробел. Например, для файла с именем foo bar:

ls | grep foo | xargs open

Приведенное выше попытается открыть файл с именем foo а затем файл с именем bar , поскольку пробел обычно разделяет аргументы.

В этом случае вы можете использовать кавычки для разделения имени файла:

ls | grep foo | xargs -I '{}' open '{}'

Однако этот подход может не сработать, если имя файла содержит пробелы.


Другим вариантом было бы использование find, которая полностью исключает каналы:

find -maxdepth 1 -name '*foo*' -exec open '{}' \;

Здесь -maxdepth 1 выполняет поиск только в текущем каталоге (т.е. не включая подкаталоги), -name '*foo*' ищет файлы, содержащие в своем имени строку foo, и -exec open {} \; , заменив {} на имя файла, которое было найдено. команда find будет автоматически обрабатывать специальные символы.


С помощью подстановки команд можно получить аналогичный результат:

open "$(ls | grep feedback)"

Это будет работать, даже если файл содержит пробелы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .