函数/别名可从全局表达式中打开所有文件

时间:2019-06-23 13:56:21

标签: linux bash gnome

我正在尝试编写一个终端函数/别名,以打开我想要的任何glob表达式中的所有文件(例如,具有相同扩展名的所有文件)。

我尝试同时使用find -execfind | 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 :(得分: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