Відкрийте файл безпосередньо після grep


0

У мене виникає проблема з трубопроводами в Linux,

ls | grep feedback

У мене є псевдонім для xdg-open, який відкрито, як це зробити, щоб ім'я файлу з grep перейшло безпосередньо до відкритого

це не працює

ls | grep feedback | open

1
open *feedback*Насправді цього не вистачить?
slhck

Відповіді:


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)"

Це буде працювати, навіть якщо файл містить пробіли.


Збережіть, коли імена файлів містять пробіли. Я додав це до вашої відповіді. Якщо ви вважаєте, що зміни є занадто радикальними, сміливо відкочуйтесь.
slhck
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.