寻找文件
快速尋找文件
尋找命令存儲位置
如果調用一個沒有路徑的命令時,想知道它在文件系統的位置如何,可以使用type命令:
$ type gcc gcc is /usr/bin/gcc $ type type type is a shell builtin $ type newgcc newgcc is aliased for /usr/test/bin/gcc $ type myfunc func is a function $ type foobar -bash: type: foobar: not found由于type命令為內部Shell命令,所以它認得別名與函數。
find用法
find介紹
語法find [files-or-directories] [options] 用途尋找與指定名稱模式匹配或具有給定屬性的文件 主要選項-atime n選定n天前訪問的文件-ctiom n選定n天前改過inode的文件-follow接著符號性連接-group g選定組g內的文件(g為用戶組ID名稱或數字)-links n選定擁有n個直接鏈接的文件-ls產生類似ls形式的列表,而不是只有文件名。-mtime選定n天前修改過的文件-name 'pattern'選定文件名與模式匹配的文件-perm mask選定與指定八進制權限掩碼匹配的文件-prune不向下遞歸到目錄樹狀結構里-size n選擇大小為n的文件-type t選定類型為t的文件,類型是單一字母:d為目錄、f為文件、l為符號性連接。-user u選定用戶u擁有的文件(u為用戶ID名稱或編號) 注意(1)由于find默認會向下尋找目錄,所以當它在大型文件系統中尋找時,會花費很長的執行時間。(2)find輸出的是未排序的結果。find與其他UNIX命令最大的不同之處在于:要查找的文件與目錄,要放在參數列表的第一位,且目錄幾乎是遞歸地向下深入(尋找)。最終要顯示而選定名稱的選項或操作放在命令行的最后。
find不同于ls的地方是:
- 它沒有隱藏文件的概念,也就是說:就算是點號開頭的文件名,find還是能找到它。
- find不排序文件名。它只是以它讀到目錄的順序依次顯示,因此,可以得到find命令之后,通過管道加入步驟。
- 當find處理的是目錄時,它會自動遞歸深入目錄結構,除非使用-prune選項。
當find找到文件要處理時,它會先執行命令行選項所設置的選擇限制,入股這些測試成功,則將名稱交給內部的操作程序處理。默認操作是將名稱打印在標準輸出上。舊的的find實現會要求明確地指出-print選項,才能產生輸出。
下面的例子單純使用find尋找當前目錄樹下的所有東西:
$ ls # 確認這是一個空目錄 $ mkdir -p sub/sub1 # 建立一個目錄樹 $ touch one two .uno .dos # 在該目錄下建立一些空文件 $ touch sub/three sub/sub1/four # 在樹狀結構較深層的地方建立一些空文件 $ find # 從此開始尋找所有東西 . ./two ./.dos ./sub ./sub/sub1 ./sub/sub1/four ./sub/three ./.uno ./one使用sort進行排序:
$ find | LC_ALL=C sort . ./.dos ./.uno ./one ./sub ./sub/sub1 ./sub/sub1/four ./sub/three ./two設置LC_ALL=C取得ASCII排序順序。
-ls選項,可得到如指定了ls -liRs的輸出結果。不過,它缺乏進一步的選項控制這個冗長顯示的格式:
$ find -ls 2055172 4 drwxrwxr-x 3 weblogic weblogic 4096 7月 11 17:07 . 4501908 0 -rw-rw-r-- 1 weblogic weblogic 0 7月 11 17:07 ./two 4501910 0 -rw-rw-r-- 1 weblogic weblogic 0 7月 11 17:07 ./.dos 2055173 4 drwxrwxr-x 3 weblogic weblogic 4096 7月 11 17:07 ./sub 2055174 4 drwxrwxr-x 2 weblogic weblogic 4096 7月 11 17:07 ./sub/sub1 4568789 0 -rw-rw-r-- 1 weblogic weblogic 0 7月 11 17:07 ./sub/sub1/four 3755216 0 -rw-rw-r-- 1 weblogic weblogic 0 7月 11 17:07 ./sub/three 4501909 0 -rw-rw-r-- 1 weblogic weblogic 0 7月 11 17:07 ./.uno 4501907 0 -rw-rw-r-- 1 weblogic weblogic 0 7月 11 17:07 ./one這里以ls顯示相同的文件數據:
$ ls -liRs * 4501907 0 -rw-rw-r-- 1 jones devel 0 07-11 17:07 one 4501908 0 -rw-rw-r-- 1 jones devel 0 07-11 17:07 twosub: 總計 4 2055174 4 drwxrwxr-x 2 jones devel 4096 07-11 17:07 sub1 3755216 0 -rw-rw-r-- 1 jones devel 0 07-11 17:07 threesub/sub1: 總計 0 4568789 0 -rw-rw-r-- 1 jones devel 0 07-11 17:07 four現在給find命令一些文件模式:
find -name 'o*' ./one $ find sub sub sub/sub1 sub/sub1/four sub/three抑制目錄向下尋找的功能:
$ find -prune # 不要在此目錄下尋找 . $ find . -prune # 同上(另一種方式) . $ find * -prune # 尋找目錄下的文件 one sub two $ ls -d * one sub two注意,沒有文件或目錄參數,是等同于當前的目錄,所以前兩個例子只會報告該目錄。然而,星號會匹配每一個非隱藏文件,所以第三個find的運行,就如同ls -d,只不過它是一行顯示一個文件。
-group或-user選項需要一個接著的負號或數值識別碼。因此,find / -user root會在root擁有的整個樹狀結構中查找文件。find $HOME/. ! -user $USER,這條命令的意思是:從我的根目錄開始,列出所有不屬于我的文件。這里使用$HOME/.而非$HOME,使得如果$HOME為符號連接,命令也可正常運行。
-perm需要接上一個八進制字符串的權限掩碼,其可以具有選用的正/負號。如掩碼不帶任何正負號,則必須有確實的匹配權限。如果為負號,則所有的位設置都必須匹配。如果為正號,則至少有一個位設置要匹配。如:
-perm -002 尋找(所有者與組外)其他人可寫入的文件 -perm -444 尋找任何人都可讀取的文件 ! -perm -444 尋找任何人都無法讀取的文件 -perm 444 尋找權限為r--r--r--的文件 -perm +007 尋找其他人可訪問的文件 ! -perm +007 尋找其他人無法訪問的文件-size選項必須接上一個數字參數。默認值是以512字節為單位的大小,不過,允許在數字之后加上c(字節)、k(KB)。如果數字未帶有正負號,則指的是必須確實匹配于該文件大小;如果為負,則只有小于該數字(絕對值)的文件大小是匹配的;如果帶有正號,則只有大于該容量的文件才匹配。所以find $HOME/. -size +1024k會在當前目錄樹下的所有文件中,尋找是否有大于1MB的,而find . -size 0則是尋找當前目錄下的所有文件是是空的。
-type選項必須接上一個字母參數,以表明文件類型。較重要的幾個為d的目錄、f的一般文件,以及l的符號連接。
-links選項要求接上一個整數。如未指定正負號,會只選擇具有指定數量的直接連接的文件;如果為負號,則只尋找連接數小魚該數字(絕對值)的文件;如果為正號,則僅選擇連接數大于該數的文件。如,尋找具有直接鏈接的文件:find . -links +1。
-atime(訪問時間)、-ctime(inode變更時間)與-mtime(修改時間)必須接上一個以天為單位的整數。未指定正負號,即指確實的幾天前;如果為負,則只少于該天數(絕對值);為正則大于該天數。find . -mtime +7可尋找一周前修改過的文件。
-newer file,可以選擇比指定文件更接近最近時間修改過的文件。如果要的單位比這個時間還精細,可以建立一個空文件touch -t date_time timestampfile,然后以此文件搭配使用-newer選項。如果要找的是比該文件更舊的文件,使用否定項即可:! -newer timestampfile。
find命令的選擇器項可以合并使用,如另外配置-a(AND)選項或-o(OR)選項。
# 尋找文件大小塊小于10的非空文件 $ find . -size +0 -a -size 10 # 尋找空文件,或過去一年未讀取過的文件 $ find . -size 0 -o -atime +365find示例腳本
轉載于:https://www.cnblogs.com/liangyonglu/p/5690736.html
總結
- 上一篇: Java 分页通用
- 下一篇: [Linux]history 显示命令执