我在bash中有一个很长的命令,我不想一直打字,所以我在.profile中加了一个别名
alias foo='...'
现在我想使用find -exec
执行此别名find . -exec foo '{}' \;
但找不到foo:
find:foo:没有这样的文件或目录
是否可以在find中使用别名?
答案 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 {}" \;