在 find -exec 中使用别名
我在 bash 中有一个很长的命令,我不想一直输入它,所以我在 .profile 中放置了一个别名
alias foo='...'
现在我想使用 find -exec 执行这个别名
find . -exec foo '{}' \;
,但 find 找不到 foo:
查找:foo:没有这样的文件或目录
是否可以在 find 中使用别名?
I have a very long command in bash, which I do not want to type all the time, so I put an alias in my .profile
alias foo='...'
Now I want to execute this alias using find -exec
find . -exec foo '{}' \;
but find cannot find foo:
find: foo: No such file or directory
Is it possible to use an alias in find?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
find
本身并不知道有关别名的任何信息,但您的 shell 知道。如果您使用的是足够新的bash
版本(我认为 4.0 添加了此功能),您可以使用find 。 -exec ${BASH_ALIASES[foo]} {} \;
在命令行中的该位置插入别名的文字内容。find
itself doesn't know anything about aliases, but your shell does. If you are using a recent enough version ofbash
(I think 4.0 added this feature), you can usefind . -exec ${BASH_ALIASES[foo]} {} \;
to insert the literal content of the alias at that point in the command line.不, find 对您的别名一无所知。别名与环境变量不同,因为它们不会被子进程“继承”。
您可以使用相同的命令创建一个 shell 脚本,设置 +x 权限并将其放在您的路径中。这将与 find 一起使用。
Nope, find doesn't know anything about your aliases. Aliases are not like environment variables in that they aren't "inherited" by child processes.
You can create a shell script with the same commands, set +x permissions and have it in your path. This will work with find.
在处理 find 结果时调用别名的另一种方法是使用类似 这个答案
因此以下内容应该有效:
Another way of calling an alias when processing the results of find is to use something like this answer
so the following should work:
在本示例中,我使用的是众所周知的
ll
别名,但您也可以使用自己的别名,只需将以下行中的ll
替换为您的别名 (foo) 并且它应该可以工作:
您的情况:
请注意,它假设使用以下语法引用您的别名:
I am using the
ll
commonly know alias for this example but you may use your alias instead, just replacell
in the following line with your alias (foo
) and it should work:your case:
Note it assumes your alias is quoted using the following syntax:
在
find
命令中使用别名是不可能的(或者很困难/容易出错)。实现所需结果的一种更简单的方法是将别名的内容放入 shell 脚本中并运行该 shell 脚本:
sed 命令删除前导
alias foo='
并替换尾随' 由
"$@"
组成,其中包含传递给脚本的参数。It's not possible (or difficult / error-prone) to use aliases in the
find
command.An easier way to achieve the desired result is putting the contents of the alias in a shellscript and run that shellscript:
The sed command removes the leading
alias foo='
and replaces the trailing'
by"$@"
which will contain the arguments passed to the script.您可以使用该变量来代替。
因此,不要
使用:
然后通过命令替换或 eval 来执行它,例如:
或:
这是查找所有非二进制文件的真实示例:
You can use the variable instead.
So instead of:
use:
then execute it either by command substitution or
eval
, for instance:or:
Here is real example which is finding all non-binary files:
我遇到了同样的事情并且几乎实现了 skjaidev 的解决方案。
我创建了一个名为 findVim.sh 的 bash 脚本,其中包含以下内容:
然后我添加了 .bashrc 别名:
最后,我使用源 ~/.bashrc 重新加载了 .bashrc。
无论如何,长话短说,我可以更快地编辑任意脚本文件:
$ fvim foo.groovy
I ran into the same thing and pretty much implemented skjaidev's solution.
I created a bash script called findVim.sh with the following contents:
Then I added the the .bashrc alias as:
Finally, I reloaded .bashrc with source ~/.bashrc.
Anyways long story short I can edit arbitrary script files slightly faster with:
$ fvim foo.groovy