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
答案 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
。
很高兴解决了它!