亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

再看一眼find--find使用中遇到的問題分析

2024-06-28 14:32:14
字體:
來源:轉載
供稿:網友

1 簡單find命令

1.1 目錄結構

代碼1$ tree.|-- 2.log`-- backup    `-- 1.log3 directories, 0 files

1.2 簡單的find命令

代碼2$ find -path ./backup./backup

1.3 錯誤的通配符使用

代碼3$ mkdir backup123$ find -path ./backup*find: paths must PRecede expressionUsage: find [path...] [expression]

find命令報錯:路徑必須先表達。問題分析(引自:http://www.CUOXin.com/baibaluo/archive/2012/08/16/2642403.html):

當目錄下存在多個backup*,shell命令變成find -path backup backup123.此時,-name后面有2個匹配字符,shell報錯。

解決辦法:-path(-name)匹配的字符串已經要用單引號,或者雙引號引住。

1.4 正確的通配符寫法

代碼4$ find -path './backup*'./backup./backup/1.log./backup123

此時,命令運行正確!

2 find多條件

expr1 expr2 -o expr3 等同于 expr1 -a expr2 -o expr3.與其他語言中的與或非類似。并且是短路求值

2.1 find多條件嘗試:與

代碼5$ find -path ./backup -name '*.log'$

沒有任何返回結果。該語句的含義是:路徑是path,并且名字是以.log結尾的文件。顯然,并不存在。

本語句實際上是想查找,backup下所有的以.log結尾的文件。應是:

  1. find -path './backup*' -name '*.log'

2.2 find多條件嘗試:或

代碼6$ find -path './backup*' -o -name '*.log'./backup./backup/1.log./2.log./backup123

到這個地方,-a-o的體會已經一目了然了吧。這條命令展示了在backup*下的所有文件和以.log結尾的所有文件。

3 -prune的體會

貼上這樣的幾條shell命令,請先自行體會:

代碼7$ find -path './backup*'./backup./backup/1.log./backup123$ find -path './backup*' -prune./backup./backup123

3.1 prune的基本使用

-prune在man中是這么說的

If -depth is not given, true; do not descend the current directory.
If -depth is given, false; no effect.

如果find語句中存在-depth選項,那么-prune將會被忽略。否則,-prune將聲明不展開當前路徑。

這樣在上述的1、2條命令中,由于-prune選項的存在,致使backup路徑沒有展開。所以1.log沒有在打印列表中。

我們再次做這樣的嘗試:

代碼8$ touch backup123/3.log$ find -path './backup*' -prune./backup./backup123$ find -path './backup*'./backup./backup/1.log./backup123./backup123/3.log

打印的結果和預期是一樣的。

按照上述2 find多條件中說道的那樣,find -path './backup*'獲得所有backup前綴的文件,然后將結果和-prune:其實就是判斷前者的結果中是否包含指定路徑的子文件(夾)。

3.2 prune做排除路徑用

而一般情況下prune是這樣使用的

代碼9$ find -path './backup*' -prune -o -name '*.log' -print./2.log

指代的意思是當前路徑除去backup*文件夾外的所有*.log文件。

3.2.1 一個問題

這樣是如愿以償了,但是我們執行一下這樣的一條命令:

代碼10$ find -path './backup*' -o -name '*.log' -print./2.log

返回的結果一模一樣。

3.2.2 進一步剖析

這個問題我們暫且擱置不論,繼續來看這樣的2個命令:

代碼11$ find -path './backup*' -prune -o -name '*.log'./backup./2.log./backup123$ find -path './backup*'  -o -name '*.log'./backup./backup/1.log./2.log./backup123

2個結果集中只是缺少了./backup/1.log-prune做到的只是一個收縮路徑的功能。

再繼續對比這2個命令和上面兩個命令,缺少的是一個-print.其實在man里面有這樣的一句話"If no expression is given, the expression '-print' is used."

也就是說-print是個默認值,那么上面2組命令實際上可以這樣看待:

輸入命令實際命令
find -path './backup*' -o -name '*.log'find /( -path './backup*' -o -name '*.log' /) -print
find -path './backup*' -o -name '*.log' -printfind /( -path './backup*' /) -o /( -name '*.log' -print /)

代碼9代碼10中的片段可以理解為打印-path './backup*'為false 、 -name '*.log' 為true的find結果。

代碼11中的片段則是將-path './backup*' -o -name '*.log'過濾后所有為true的結果都打印。

3.2.3 總結

那么這樣看來,其實排除路徑其實是將-print放置到了-o后面作為輸出。而-path './backup*'執行過,并且返回true,單并未被打印。

那么是不是說,其實,其實,其實-prune并沒有什么用?

4 總結:多一點角度看find

其實可以認為

  1. find無可避免的對指定路徑進行了全文搜索,默認情況下是深度優先搜索(只有在指定-depth的時候使用廣度優先搜索)。
  2. find進行全文搜索以后,將結果扔到后面的過濾條件中,按照與或非的規則,逐條過濾。
  3. 最終返回值為true的item被打印了出來

試想這樣一個場景,在一個java項目中,由于項目龐大,總文件數上萬。想要找到最深2級目錄下所有的java文件。

find . -name "*.java" -maxdepth 2find . -maxdepth 2 -name "*.java"

這樣的2條命令,顯然第二條的執行效率會快?。?!-maxdepth 2 極大程度的進行了一次結果過濾。

那么在寫find命令的時候,應該把能最大程度減小結果集的結果放到前面。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
自拍偷拍免费精品| 国产成人在线播放| 日本久久久久久久久| 日韩影视在线观看| 精品视频偷偷看在线观看| 亚洲一区二区三区视频播放| 国产精品亚洲一区二区三区| 国产精品美女999| 久久伊人色综合| 亚洲图片在区色| 亚洲欧洲日产国码av系列天堂| 久久九九免费视频| 久久的精品视频| 亚洲白虎美女被爆操| 日韩国产中文字幕| 亚洲国产婷婷香蕉久久久久久| 亚洲精品国产精品自产a区红杏吧| 日韩在线中文字| 狠狠色狠狠色综合日日小说| 亚洲欧美制服另类日韩| 久久久久久久久久久免费| 久久中国妇女中文字幕| 欧美大码xxxx| 中文字幕精品网| 97精品伊人久久久大香线蕉| 国产精品青草久久久久福利99| 欧美在线播放视频| 中文字幕精品—区二区| 色综合久久悠悠| 日本最新高清不卡中文字幕| 欧美有码在线观看视频| 亚洲精品免费在线视频| 国产精品综合不卡av| 国产成人av网址| 国产中文字幕日韩| 日韩在线免费观看视频| 久久国产视频网站| 国产男人精品视频| 国产亚洲美女精品久久久| 7m第一福利500精品视频| 国产精品一区二区三区久久久| 色偷偷9999www| 久久视频国产精品免费视频在线| 国产自产女人91一区在线观看| 97精品国产97久久久久久| 成人精品视频99在线观看免费| 在线播放日韩精品| 国产精品成人观看视频国产奇米| 成人免费大片黄在线播放| 国产主播在线一区| 欧美日韩精品在线视频| 欧美日韩亚洲一区二区三区| 日韩精品小视频| 欧美日韩国产成人在线| 亚洲国产日韩欧美在线动漫| 蜜臀久久99精品久久久久久宅男| 亚洲第一网中文字幕| 92看片淫黄大片看国产片| 中文字幕不卡av| 国产精品久久久久高潮| 98午夜经典影视| 国内精品一区二区三区| 欧美猛男性生活免费| 亚洲欧美另类人妖| 高清一区二区三区四区五区| 久久精品99久久久久久久久| 久久频这里精品99香蕉| 久久久电影免费观看完整版| 亚洲色图美腿丝袜| 欧洲成人免费aa| 国产精品88a∨| 亚洲欧美另类国产| 91精品国产高清| 92福利视频午夜1000合集在线观看| 亚洲视频777| 亚洲欧美中文另类| 国产成人精品在线观看| 欧美野外猛男的大粗鳮| 亚洲精品视频久久| 亚洲男人天堂古典| 国产一区二区黑人欧美xxxx| xxx一区二区| 欧美性xxxx18| 久久久久成人网| 久久久国产视频| 亚洲精品国产精品乱码不99按摩| 亚洲精品av在线播放| 136fldh精品导航福利| 日韩视频在线免费观看| 亚洲国产精品yw在线观看| 91禁外国网站| 久久久久久com| 国产一区二区三区四区福利| 欧美俄罗斯乱妇| 亚洲一二三在线| 久久久久一本一区二区青青蜜月| 国a精品视频大全| 日韩免费在线播放| 国产一区二区三区久久精品| 国产日产欧美a一级在线| 欧美日韩福利在线观看| 日韩精品中文在线观看| 亚洲欧美色图片| 亚洲a级在线观看| 91免费视频国产| 国产精品久久久久av| 国产欧美日韩精品在线观看| 精品久久在线播放| 欧美交受高潮1| 久久精品视频亚洲| 国产精品色午夜在线观看| 91视频免费在线| 欧美黑人狂野猛交老妇| 色偷偷噜噜噜亚洲男人| 亚洲18私人小影院| 亚洲xxxx视频| 亚洲大胆人体视频| 亚洲日本中文字幕免费在线不卡| 精品久久久久久国产91| 91中文在线视频| 日本高清视频精品| 国产成人精品在线播放| 亚洲视频在线观看视频| 久久这里只有精品视频首页| 亚洲视频在线观看网站| 成人在线激情视频| 久久香蕉国产线看观看网| 中文字幕欧美日韩精品| 成人福利在线视频| 久久久精品免费视频| 亲爱的老师9免费观看全集电视剧| 亚洲国产99精品国自产| 亚州国产精品久久久| 精品国产一区二区三区在线观看| 国产成人综合亚洲| 国产性猛交xxxx免费看久久| 久久久久久有精品国产| 97在线视频免费看| 91免费看视频.| 亚洲国产成人久久| 日韩国产高清污视频在线观看| 色综合色综合久久综合频道88| 欧美激情videoshd| 成人久久一区二区三区| 国产成人精品优优av| 欧美成人精品h版在线观看| 中文字幕亚洲综合| 欧美尺度大的性做爰视频| 57pao国产成人免费| xx视频.9999.com| 国产精品网站入口| 亚洲性视频网站| 欧美孕妇与黑人孕交| 亚洲精品成人久久久| 欧美xxxwww| 成人精品视频99在线观看免费| 精品国产1区2区| 亚洲高清免费观看高清完整版| 日韩中文在线中文网在线观看| 亚洲午夜未删减在线观看| 最近2019中文字幕一页二页| 国产精品高清在线观看| 亚洲日本中文字幕| 久久精品国产成人精品|