8 shell命令之find


find命令,像cd一樣經常使用.只是可能大多數時間僅僅要那么一兩個參數就足夠使用了.或者說,勉強夠用了.可是當我們主動的去翻看一下find的手冊,會發現原來更實用的功能都沒實用到.

本文結合自己的使用對find進行簡單的介紹.不保證全面,僅列出我在使用中受益頗多的選項.

find dir [option]  指定當前的一個文件夾進行查找.

option能夠省略,假設省略的話,find會遞歸的列出當前文件夾下的全部文件.

經常使用的option有非常多,僅列出經常使用的一部分:

-name   指定文件名稱,能夠使用通配符,假設使用通配符的話,須要用雙引號擴起來.

-type    指定文件的類型,可選的類型包含普通文件f  文件夾文件d  符號文件l  字符設備c  塊設備b等.

-size   后面能夠接+-N   接+N表示超出N指定大小的文件,-N表示小於N指定的大小.

-newer  file   列出當前文件夾以及子文件夾中,新於指定file文件的

-mtime  +-N   和size選項類似,+N表示改動時間老於指定的N*24消失.-N表示改動時間新於N*24消失.

-ctime   +-N   同上,只是表示的是文件的狀態改變的時間,注意find並沒有所謂的按創建時間查找

-atime +-N   同上,查找的基准是訪問的時間.

-maxdepth   最大文件夾深度.指定了這個選項,能夠避免find無止境的去遍歷子文件夾.

-depth   這個選項的意思是處理完一個文件夾,再去遍歷子文件夾.

-and   用於條件,能夠指定多個條件,返回的結果是滿足全部條件的文件

-or   同上,只是返回的是滿足條件之中的一個的就可以.

!   放在選項前面,后面能夠看到他的使用方法.用來指定不滿足條件的文件.

-exec command [option]  {} \;   非交互式運行命令,即將find找到的全部文件運行command.注意{}和\之間的空格.

-ok command [option] {] \;   交互式運行命令,將find找出來的文件運行command,可是會提示是否確認.

-delete   將查找出來的文件都刪除.

以上應該就能夠應付大多數的場景了.之所以用find事實上還有另外一個原因.是我不經意間發現的.當一個文件夾下文件較多的時候.可能你想這樣運行命令:ls "*.txt" | xargs cat

看似沒有問題的一條命令,卻會錯誤發生.原因是文件太多了.無法用這個命令,這個時候find也會派上用場.想必find肯定有不一樣的地方吧.

來看看find在實際中的應用吧.

1. 找出當前文件夾的普通非sh后綴的文件並運行cat

2. 列出非sh和txt后綴的文件

上面列舉了兩種可能的寫法.注意!和選項之間一定要有空格,否則會報錯.注意前后小括號與選項之間也要有空格,否則也會報錯.

小括號的作用可能如今體現的不是非常明顯.我一時也想不到詳細的樣例了.總之就是假設沒有小括號,有一種場景,多個條件做過濾而且使用-exec選項的時候,-exec選項后面的command只運行最后一個指定選項過濾出來的文件.額,我遇到過這個問題.可是卻想不出來場景了.羞愧.

3. 列出當前文件加下大於某個大小的文件

須要注意的是,當沒有指定單位的時候,size后面的數字的單位是512byte的一個塊.所以不要想當然的覺得是字節.


大致find的使用方法就總結這么多.肯定有非常多不全面的,好在find的選項理解起來並不難,所以對比這選項也能夠寫出語句來.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM