find 的-regex 与 -name的区别
1. 與-name, -iname最大的區別就在于 -regex是把find輸出的整個結果(有別于絕對路徑名)作為要匹配的對象, 而不僅僅是結果的最后一部分
舉例:
/tmp目錄下有且僅有?aaa,?aa,?1,?2?這些文件?find?-name?"a*"??可以找到aaa和aafind?/tmp?-regex?"a*"就不行,?它一個都找不到,?因為找到的每個結果是這樣的 /tmp/aaa /tmp/aa-name?是對結果中的"aaa"和"aa"這個部分進行匹配,? 而-regex卻是對完整的?"/tmp/aaa"和"/tmp/aa"進行匹配. 所以你要寫作find?/tmp?-regex?".*a.*"2. 注意上面的是.*而不是*
-name所能解釋的是基于shell中file glob的匹配字符, 包括:
(1)*表示任意長度字符串
(2)?表示任意的單個字符
(3)[set] 表示一個可選字符集合
(4)[^set]或[!set]表示以ASCII為全集對[set] 求補集的一個集合
(5)brace expansion, 即把/tmp/{a,b,c}擴展為三個字串
/tmp/a /tmp/b 和/tmp/c
注意 shell的file globing機制往往不被認為是正則表達式.
-regex接受的是"正統"的正則表達式
基本上它跟emacs文檔里講的regex是一樣的, 因為find手冊里regex的解釋部分實際就是鏈接到emacs 中講解regex的那個部分.?
在上面例子中最大區別就是.* 來表示任意長度字符串.
舉例:
刪除/tmp目錄中所有數字命名的文件夾
find?/tmp?-type?d?-regex?".*/[0-9]*"?-exec?rm?-rf?{}?\;本文轉自:
https://my.oschina.net/taomac/blog/100248
find用法鏈接:
http://www.oschina.net/translate/15-practical-unix-linux-find-command-examples-part-2
http://www.oschina.net/translate/15-practical-linux-find-command-examples
轉載于:https://blog.51cto.com/qiangsh/1955116
總結
以上是生活随笔為你收集整理的find 的-regex 与 -name的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python __future__ 的几
- 下一篇: 解决HP ProLiant DL380