我经常需要找到一个文件,但我不确定该文件的名称是什么,如下所示:
$ find -iname '*foo*' -o -iname '*bar*' -o -iname '*blah*'
这有点乏味。我想创建一个更易于使用的别名,如下所示:
$ findany foo bar blah
这是我的尝试:
findany() {
args=("-iname" "'*$1*'")
shift
while [ $# -gt 0 ]; do
args+=("-o" "-iname" "'*$1*'")
shift
done
find ${args[@]}
}
问题是它永远不会产生任何结果,即使文件就在那里:
$ ls
bar.txt blah.txt foo.txt
$ findany foo bar blah
# nothing
如果我echo
在命令前面添加,它看起来是正确的:
$ findany foo bar blah
find -iname '*foo*' -o -iname '*bar*' -o -iname '*blah*'
如果我复制上面的输出并运行它,它就可以正常工作:
$ find -iname '*foo*' -o -iname '*bar*' -o -iname '*blah*'
./bar.txt
./foo.txt
./blah.txt
我认为这与参数分割或引号有关,但我不确定如何调试它。
我通常使用 zsh,但我在 bash 中验证了相同的行为。