У меня проблема с трубопроводом в Linux,
ls | grep feedback
У меня есть псевдоним для xdg-open, который открыт, как можно сделать, чтобы имя файла из grep перешло прямо в open
Это не работает
ls | grep feedback | open
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)"
Это будет работать, даже если файл содержит пробелы.