Bash 在find-exec中使用别名

Bash 在find-exec中使用别名,bash,find,alias,Bash,Find,Alias,我在bash中有一个很长的命令,我不想一直键入它,所以我在.profile中添加了一个别名 alias foo='...' 现在我想使用find-exec执行这个别名 find . -exec foo '{}' \; 但是find无法找到foo: find:foo:没有这样的文件或目录 可以在find中使用别名吗?不,find对您的别名一无所知。别名与环境变量不同,因为它们不是由子进程“继承”的 您可以使用相同的命令创建shell脚本,设置+x权限并将其保存在您的路径中。这将适用于find。

我在bash中有一个很长的命令,我不想一直键入它,所以我在.profile中添加了一个别名

alias foo='...'
现在我想使用find-exec执行这个别名

find . -exec foo '{}' \;
但是find无法找到foo:

find:foo:没有这样的文件或目录


可以在find中使用别名吗?

不,find对您的别名一无所知。别名与环境变量不同,因为它们不是由子进程“继承”的

您可以使用相同的命令创建shell脚本,设置+x权限并将其保存在您的路径中。这将适用于find。

find
命令中不可能(或很难/容易出错)使用别名。 实现所需结果的更简单方法是将别名的内容放入shellscript并运行该shellscript:

alias foo | sed "s/alias foo='//;s/'$/ \"\$@\"/" > /tmp/foo
find -exec bash /tmp/foo {} \;

sed命令删除前导的
别名foo='
,并用
“$@”
替换尾随的
'
,后者将包含传递给脚本的参数。

我在本例中使用的是
ll
常见别名,但您可以使用别名,只需将下一行中的
ll
替换为您的别名(
foo
),即可使用:

find . -exec `alias ll | cut -d"'" -f2` {} \;
alias ll="ls -al"
find . -type d | while read folder; do ll $folder; done
你的情况:

find . -exec `alias foo | cut -d"'" -f2` {} \;
注意:它假定您的别名使用以下语法引用:

alias foo='your-very-long-command'

find
本身对别名一无所知,但shell知道。如果您使用的是最新版本的
bash
(我认为4.0添加了此功能),那么可以使用
find-exec${BASH_别名[foo]}{}\
在命令行中插入别名的文本内容。

我遇到了同样的问题,基本上实现了skjaidev的解决方案

我创建了一个名为findVim.sh的bash脚本,其内容如下:

[ roach@sepsis:~ ]$ cat findVim.sh                                                                                                        #!/bin/bash                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
find . -iname $1 -exec vim '{}' \;
然后,我将.bashrc别名添加为:

[ roach@sepsis:~ ]$ cat ~/.bashrc | grep fvim                                                                                         
alias fvim='sh ~/findVim.sh'
最后,我用source~/.bashrc重新加载了.bashrc

总之,长话短说,我可以使用以下工具更快地编辑任意脚本文件:
$fvim foo.groovy

您可以改用该变量

因此,不是:

alias foo="echo test"
使用:

然后通过命令替换或
eval
执行它,例如:

find . -type f -exec sh -c "eval $foo" \;
或:

下面是查找所有非二进制文件的真实示例:

IS_BINARY='import sys; sys.exit(not b"\x00" in open(sys.argv[1], "rb").read())'
find . -type f -exec bash -c "python -c '$IS_BINARY' {} || echo {}" \;

处理find结果时调用别名的另一种方法是使用

因此,以下措施应该有效:

find . -exec `alias ll | cut -d"'" -f2` {} \;
alias ll="ls -al"
find . -type d | while read folder; do ll $folder; done