在find -exec中使用别名

时间:2011-10-04 20:07:53

标签: bash find alias

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

alias foo='...'

现在我想使用find -exec

执行此别名
find . -exec foo '{}' \;

但找不到foo:

  

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

是否可以在find中使用别名?

7 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:9)

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

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

答案 2 :(得分:1)

在处理查找结果时调用别名的另一种方法是使用this answer

之类的内容

所以以下内容应该有效:

alias ll="ls -al"
find . -type d | while read folder; do ll $folder; done

答案 3 :(得分:0)

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

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

sed命令删除前导alias foo='并将'替换为"$@",其中包含传递给脚本的参数。

答案 4 :(得分:0)

我正在使用此示例的ll常用别名,但您可以使用别名,只需将以下行中的ll替换为您的别名(foo),它应该工作:

find . -exec `alias ll | cut -d"'" -f2` {} \;

你的案子:

find . -exec `alias foo | cut -d"'" -f2` {} \;

请注意,它假设您的别名使用以下语法引用:

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

答案 5 :(得分:0)

我遇到了同样的事情,几乎实现了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

答案 6 :(得分:0)

您可以改用变量。

所以而不是:

alias foo="echo test"

使用:

foo="echo test"

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

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

或:

find . -type f -exec sh -c "echo `$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 {}" \;