find命令用於:在一個目錄(及子目錄)中搜索文件,你能夠指定一些匹配條件,如按文件名、文件類型、用戶甚至是時間戳查找文件。linux
find命令通常簡化形式(還能夠更復雜,更多操做) find [path...] [expression]正則表達式
path:find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄shell
touch一些測試文件express
$ ls
hello.cpp kg.lua kobebryant Kobe.lua
安全
參考:http://tiger-hu.iteye.com/blog/1927754bash
-name 和 -iname的區別在於前者對大小寫敏感,後者不敏感性能
$ find . -name "k*"
./kobebryant
./kg.lua
測試
$ find . -iname "k*"
./kobebryant
./Kobe.lua
./kg.lua
ui
-atime -n[+n]: 找出文件訪問時間在n日以內[以外]的文件。
-ctime -n[+n]: 找出文件更改時間在n日以內[以外]的文件。
-mtime -n[+n]: 找出修改數據時間在n日以內[以外]的文件。
-amin -n[+n]: 找出文件訪問時間在n分鐘以內[以外]的文件。
-cmin -n[+n]: 找出文件更改時間在n分鐘以內[以外]的文件。
-mmin -n[+n]: 找出修改數據時間在n分鐘以內[以外]的文件。lua
好比:找出一天內修改文件
$ find -ctime -1
.
./hello.cpp
./kobebryant
./Kobe.lua
./kg.lua
-exec: 對匹配的文件執行該參數所給出的shell命令。相應命令的形式爲'command' {} \;,注意{}和\;之間的空格,同時兩個{}之間沒有空格。特別注意:分號是必須打,做爲-exec的結束符
-ok: 其主要功能和語法格式與-exec徹底相同,惟一的差異是在於該選項更加安全,由於它會在每次執行shell命令以前均予以提示,只有在回答爲y的時候, 其後的shell命令纔會被繼續執行。須要說明的是,該選項不適用於自動化腳本,由於該提供可能會掛起整個自動化流程。
好比:找出60分鐘內修改的文件,並執行ls -l ,也就是顯示出詳情
$ find . -cmin -60 -exec ls -l {} \;
總用量 0
-rw-rw-r-- 1 philosophie philosophie 0 8月 5 22:29 hello.cpp
-rw-rw-r-- 1 philosophie philosophie 0 8月 5 22:27 kg.lua
-rw-rw-r-- 1 philosophie philosophie 0 8月 5 22:27 kobebryant
-rw-rw-r-- 1 philosophie philosophie 0 8月 5 22:27 Kobe.lua
-rw-rw-r-- 1 philosophie philosophie 0 8月 5 22:29 ./hello.cpp
-rw-rw-r-- 1 philosophie philosophie 0 8月 5 22:27 ./kobebryant
-rw-rw-r-- 1 philosophie philosophie 0 8月 5 22:27 ./Kobe.lua
-rw-rw-r-- 1 philosophie philosophie 0 8月 5 22:27 ./kg.lua
好比:找出kg爲首的文件,提示刪除
$ find . -name "kg*" -ok rm {} \;
< rm ... ./kg.lua > ? y
$ ls
hello.cpp kobebryant Kobe.lua
按文件所屬的owner和group查找:
-user: 查找owner屬於-user選項後面指定用戶的文件。
! -user: 查找owner不屬於-user選項後面指定用戶的文件。
-group: 查找group屬於-group選項後面指定組的文件。
! -group: 查找group不屬於-group選項後面指定組的文件。
好比
$ find . -user philosophie
.
./hello.cpp
./kobebryant
./Kobe.lua
-maxdepth: 後面的參數表示距當前目錄指定的深度,其中1表示當前目錄,2表示一級子目錄,以此類推。在指定該選項後,find只是在找到指定深度後就不在遞歸其子目錄了。下例中的深度爲1,表示只是在當前子目錄中搜索。若是沒有設置該選項,find將遞歸當前目錄下的全部子目錄。
$ mkdir hhh
$ cd hhh/
$ touch h.c
$ find . -maxdepth 1 -name "*" # 當前目錄找不到 h.c
.
./hello.cpp
./kobebryant
./hhh
./Kobe.lua
$ find . -maxdepth 2 -name "*" # 1級子目錄找到了h.c
.
./hello.cpp
./kobebryant
./hhh
./hhh/h.c
./Kobe.lua
補充:文件權限,分別爲 全部者、所在組、其餘組,八進制數字
$ ll
總用量 12
drwxrwxr-x 3 philosophie philosophie 4096 8月 5 23:56 ./
drwxrwxr-x 3 philosophie philosophie 4096 8月 5 22:26 ../
-rw-rw-r-- 1 philosophie philosophie 0 8月 5 22:29 hello.cpp
drwxrwxr-x 2 philosophie philosophie 4096 8月 5 23:57 hhh/
-rw-rw-r-- 1 philosophie philosophie 0 8月 5 22:27 kobebryant
-rw-rw-r-- 1 philosophie philosophie 0 8月 5 22:27 Kobe.lua
$ find . -perm 664
./hello.cpp
./kobebryant
./hhh/h.c
./Kobe.lua
$ find . -perm 775
.
./hhh
按文件類型查找
-type:後面指定文件的類型。
b - 塊設備文件。
d - 目錄。
c - 字符設備文件。
p - 管道文件。
l - 符號連接文件。
f - 普通文件。
$ mkdir kkk
$ find . -type d
.
./kkk
./hhh
$ find . -type d -name "h*"
./hhh
-size [+/-]100[c/k/M/G]: 表示文件的長度爲等於[大於/小於]100塊[字節/k/M/G]的文件。
-empty: 查找空文件。
好比,查找文件大小爲0的文件能夠這樣寫
-size [+/-]100[c/k/M/G]: 表示文件的長度爲等於[大於/小於]100塊[字節/k/M/G]的文件。
-empty: 查找空文件。
好比
$ find . -size 0 -exec ls -l {} \;
-rw-rw-r-- 1 philosophie philosophie 0 8月 6 10:30 ./b
-rw-rw-r-- 1 philosophie philosophie 0 8月 6 10:30 ./a
也能夠
$ find . -empty -exec ls -l {} \;
-rw-rw-r-- 1 philosophie philosophie 0 8月 6 10:30 ./b
-rw-rw-r-- 1 philosophie philosophie 0 8月 6 10:30 ./a
-newer file
好比,查找比b更新的文件,也就是更晚建立的文件
$ find . -newer b
查找不比b更新的文件,輸出會包括文件b
$ find . ! -newer b
背景:在使用find命令的-exec選項處理匹配到的文件時, find命令將全部匹配到的文件一塊兒傳遞給exec執行。但有些系統對可以傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘以後,就會出現溢出錯誤。
find命令把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是所有,不像-exec選項那樣。這樣它能夠先處理最早獲取的一部分文件,而後是下一批,並如此繼續下去。
在有些系統中,使用-exec選項會爲處理每個匹配到的文件而發起一個相應的進程,並不是將匹配到的文件所有做爲參數一次執行;這樣在有些狀況下就會出現進程過多,系統性能降低的問題,於是效率不高; 而使用xargs命令則只有一個進程。
好比:找到全部普通文件,並測試每一個文件是什麼類型的
$ find . -type f -print|xargs file
./b: empty
./c: empty
./a: empty
./t.sh: a /bin/bsah script, ASCII text executable
./hello.lua: ASCII text
參考:http://blog.csdn.net/zhushuai1221/article/details/53097008
grep (global search regular expression(RE) and print out the line 全局搜索正則表達式並把行打印出來。
做用:它能使用正則表達式搜索文本,並把匹配的行打印出來。
Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不一樣。egrep是grep的擴展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它們把全部的字母都看做單詞。
Linux使用GNU版本的grep。它功能更強,能夠經過-G、-E、-F命令行選項來使用egrep和fgrep的功能。
經常使用的grep選項有:
-c 只輸出匹配行的計數。
-i 不區分大小寫。
-h 查詢多文件時不顯示文件名。
-l 查詢多文件時只輸出包含匹配字符的文件名。
-n 顯示匹配行及行號。
-s 不顯示不存在或無匹配文本的錯誤信息。
-v 顯示不包含匹配文本的全部行。
好比:
將utils.lua出現local的行取出來
$ grep local utils.lua
local TableDB = require('.TableDB')
local M = {}
顯示出來的同時顯示行號
$ grep -n local utils.lua
2:local TableDB = require('.TableDB')
3:local M = {}
我這裏顯示出的local是標記了紅色的,本來應該不是默認這樣的,要使得查找的關鍵字的顯示顏色應該要這樣寫
grep -n --color=auto 'local'
可是之因此默認這樣是由於~/.bashrc這個文件配置過了,以下
將匹配的行的前2行後3行也打印出來,就拿bashrc這個文件爲例,找出配置了grep的地方。(後面的grep不用引號也是能夠的)
$ cat ~/.bashrc | grep -n -A3 -B2 'grep'
80- #alias vdir='vdir --color=auto'
81-
82: alias grep='grep --color=auto'
83: alias fgrep='fgrep --color=auto'
84: alias egrep='egrep --color=auto'
85-fi
86-
87-# colored GCC warnings and errors
# grep ‘energywise’ * #在當前目錄搜索帶'energywise'行的文件
# grep -r ‘energywise’ * #在當前目錄及其子目錄下搜索'energywise'行的文件
# grep -l -r ‘energywise’ * #在當前目錄及其子目錄下搜索'energywise'行的文件
之後再弄