我正在尝试编写一个终端函数/别名,以打开我想要的任何glob表达式中的所有文件(例如,具有相同扩展名的所有文件)。
我尝试同时使用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>
我认为我在传递参数时做错了事,但我不知道该怎么办。
答案 0 :(得分:0)
您没有展示如何调用失败的功能。
openall () { find . -type f -name "$1" -exec gnome-open {} \; ; }
应该可以,但是您需要引用以下参数:
openall "*.eps"
否则,shell将在调用openall
之前扩展模式 ,并且您的函数仅选择扩展参数中的第一个。
openall () { find . -iname '$1' | xargs -n 1 gnome-open ; }
此处您使用的是单引号。这将忽略所有参数,仅查找文字名称为$1
的文件。
仅提供后缀而不是模式可能更简单?这样可以避免引用:
openall () { find . -type f -name "*$1" -exec gnome-open {} \; ; }
请注意*
之前的$1
。这样称呼它:
openall .eps