2014-12-25 74 views
1

find被表現得好像我沒有引述-name模式通配符,但我引述他們:gnu發現怪異:文件名通配符被破壞?

/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(1486-PC-Linux的GNU)

我發現版本:發現(GNU的findutils)4.4.2

/proc/version:Linux版本3.2.0-4-686-pae([email protected])(gcc版本4.6.3(Debian 4.6.3-14))#1 SMP Debian 3.2.60-1 + deb7u3

+1

您是否檢查過名爲'find'的別名,函數或腳本,它們處理錯誤的參數? –

+0

@JonathanLeffler:只要'which find'返回'/ usr/bin/find'就像預期的那樣。 – RashaMatt

+1

這很有用...嘗試'別名'來查看別名,並且...它是'typeset -f'來查看函數嗎? (是的,'typeset -f'或者 - 本地Bash方式,而不是Korn shell兼容方式 - 'declare -f'。)由於'find'的行爲與'echo'不同,所以必須有'find'很奇怪。你也可以嘗試'查找命令。 -name'* .gz''應該運行該命令而不是別名或函數 - 或者確實是'/ usr/bin/find。 -name'* .gz'' –

回答

2

Tranferring要回答的評論。

您是否檢查過名爲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

很高興解決了它!