Функция / псевдоним, который открывает все файлы из выражения glob - PullRequest
0 голосов
/ 23 июня 2019

Я пытаюсь написать терминальную функцию / псевдоним, которая открывает все файлы из любого выражения глобуса, которое я хочу (например, все файлы с одинаковым расширением).

Я пытался использовать как find -exec, так и find | xargs

Это работает:

$ find . -type f -name '*.eps' -exec gnome-open {} \;

эта функция (из ~ / .bashrc) открывает только один файл:

openall () { find . -type f -name "$1" -exec gnome-open {} \; ; }

Я также попробовал маршрут xargs (который работает, когда пишется в терминале):

$ find . -iname "*.eps" -print0 | xargs -0 gnome-open ;

, который снова открывает только один файл, в то время как один работает:

$ find . -iname "*.eps" | xargs -n 1 gnome-open ;

функция (опять же, из ~ / .bashrc) не работает:

openall () { find . -iname '$1' | xargs -n 1 gnome-open ; }

как возвращается:

Usage: gnome-open <url>

Я думаю, что делаю что-то не так при передаче аргументов, но я не могу понять, что.

1 Ответ

0 голосов
/ 23 июня 2019

Вы не показываете, как вы вызываете функции, которые не работают.

openall () { find . -type f -name "$1" -exec gnome-open {} \; ; }

должны работать, но вам необходимо заключить аргумент в кавычки:

openall "*.eps"

В противном случае оболочка раскрывает шаблон до , вызывая openall, и ваша функция выбирает только первый из расширенных аргументов.

openall () { find . -iname '$1' | xargs -n 1 gnome-open ; }

Здесь вы используете одинарные кавычки.Это игнорирует все аргументы и находит только файлы с буквальным именем $1.


Может быть, проще предоставить просто суффикс вместо шаблона?Это позволяет избежать цитирования:

openall () { find . -type f -name "*$1" -exec gnome-open {} \; ; }

Обратите внимание на * перед $1.Назовите это так:

openall .eps
...