gnu发现怪异:文件名通配符坏了吗?

时间:2014-12-25 07:25:18

标签: linux bash find

find表现得好像我没有在-name模式中引用通配符,但我引用它们:

/var/log # find . -name '*.gz'
find: paths must precede expression: dmesg.1.gz
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

/var/log # find . -name dmesg.1.gz
./dmesg.1.gz
/var/log # echo '*.gz'
*.gz

我知道这曾经正常工作 - 它仍然在我的其他机器上。什么可能导致这种行为?

我的bash版本:GNU bash,版本4.2.37(1)-release(i486-pc-linux-gnu)

我的发现版本:find(GNU findutils)4.4.2

/ proc / version:Linux版本3.2.0-4-686-pae(debian-kernel@lists.debian.org)(gcc版本4.6.3(Debian 4.6.3-14))#1 SMP Debian 3.2 .60-1 + deb7u3

1 个答案:

答案 0 :(得分:2)

转移评论以回答。

您是否检查了名为find的别名,函数或脚本是否错误处理了它们的参数?

  

仅在which find按预期返回/usr/bin/find的范围内。

这很有用...尝试alias查看别名,然后...... typeset -f查看功能吗? (是的,typeset -f或 - 本机Bash方式而不是Korn shell兼容方式 - declare -f。)由于find的行为与echo不同,因此必须有一些关于find这很奇怪。你也可以尝试:

command find . -name '*.gz'

应该运行命令而不是别名或函数 - 或者确实:

/usr/bin/find . -name '*.gz'
  

这样做了 - 我定义了find()函数,command find按预期工作。找到了set | grep find

很高兴解决了它!