find : 路径必须在表达式之前
生活随笔
收集整理的這篇文章主要介紹了
find : 路径必须在表达式之前
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本案環境:
[root@bright?public]#?cat?/etc/redhat-release?&&?uname?-r? CentOS?release?6.6?(Final) 2.6.32-504.el6.x86_64使用find 命令時報錯:
[root@bright?public]#?find?/opt?-type?f?-name?fil*?-exce?ls?-lh?{}?\; find:?路徑必須在表達式之前:?file4.txt [root@bright?public]#?find?/?-name?*.txt find:?路徑必須在表達式之前:?file78.txt解決的方法有兩種
使用轉義符把*轉義,即 ?\*.txt
用引號引起來 ,即 "*.txt"
原因:
首先,shell 會擴展*.txt 如果有匹配,根據匹配的數量會有不同的結果。
0 個匹配: *.txt 仍然保持不變
1 個匹配: *.txt 變成那個匹配的文件名
多于 1 個匹配: *.txt 變成多個單詞,也就是所有匹配的文件名
例如:/tmp下有1.txt 2.txt就會報錯,因為find命令成為了
find /tmp/ -name 1.txt 2.txt -exec ls -l {} \;
只有1.txt會被識別,2.txt無法識別所以會報錯。如果要在 -name 中使用正則表達式,必須加以轉義,防止 shell 首先擴展它。轉義的辦法就是加上\或者引號,這樣 -name 選項總是只接受這一個參數。
不過在我機器上不轉義也不會報錯,我覺得各個linux版本之間可能還是會有差異,這個沒有對與錯,但是需要有一個標準,寫命令的時候要按照標準來寫,也就是都加上轉義,以免寫腳本的時候其他機器報錯。
資料來源
轉載于:https://blog.51cto.com/zmyxn/1621598
總結
以上是生活随笔為你收集整理的find : 路径必须在表达式之前的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: postgresql数据库备份与还原
- 下一篇: Hive Join Strategies