Unix Power Tools 中的奇怪别名“find .-name '*\!{*}*' -ls”

Wil*_*ard 3 find alias csh wildcards

来自 Unix Power Tools 第 3 版第 175 页:

第 9.27 节展示了一种匹配路径中间目录的方法。这是一个更简单的“查找文件”别名,可以派上用场:

alias ff "find . -name '*\!{*}*' -ls"

给它一个文件或目录名;别名将给出包含参数的任何文件或目录名称的长列表。

(这也可以在线获得。)

我根本没有得到-name操作员的论据。这是笔误吗?它仅适用于特定版本find吗?反斜杠、bang 和花括号的作用是什么?

Ste*_*itt 7

那是一个csh别名;给出的参数-name由 shell 解释,而不是由find. 如果我理解正确,\!{*}则替换为给定的参数ff(尽管通常只是\!*)。这本书没有指定外壳确实很奇怪......

基本上定义了别名,键入

ff test
Run Code Online (Sandbox Code Playgroud)

find . -name '*test*' -ls
Run Code Online (Sandbox Code Playgroud)

(并且它不能优雅地处理多个参数)。

在本书的第二版中,文本以问题中给出的相同方式定义别名,并指向随附 CD 上的csh_initsh_init。(这是第 17.04 节。)有趣的是,csh_initCD 上没有定义别名,而是sh_init定义了一个等效的ff函数:

ff() { find . -name "*$1*" -ls; }
Run Code Online (Sandbox Code Playgroud)