find & grep 命令 in linux(轉)
Linux下面工作,有些命令能夠大大提高效率。本文就向大家介紹find、grep命令,他哥倆可以算是必會的linux命令,我幾乎每天都要用到他們。本文結構如下:
- -exec,find命令對匹配的文件執行該參數所給出的shell命令。相應命令的形式為‘command‘ { } \;,註意{ }和\;之間的空格
find ./ -size 0 -exec rm {} \; 刪除文件大小為零的文件 (還可以以這樣做:rm -i `find ./ -size 0` 或 find ./ -size 0 | xargs rm -f &)
為了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec選項中:find . -type f -exec ls -l { } \;
在/logs目錄中查找更改時間在5日以前的文件並刪除它們:find /logs -type f -mtime +5 -exec rm { } \; -
-ok,和-exec的作用相同,只不過以一種更為安全的模式來執行該參數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓用戶來確定是否執行。
find . -name "*.conf" -mtime +5 -ok rm { } \; 在當前目錄中查找所有文件名以.LOG結尾、更改時間在5日以上的文件,並刪除它們,只不過在刪除之前先給出提示
start_directory test options criteria_to_match action_to_perform_on_results
-
-name
按照文件名查找文件。
find /dir -name filename 在/dir目錄及其子目錄下面查找名字為filename的文件
find . -name "*.c" 在當前目錄及其子目錄(用“.”表示)中查找任何擴展名為“c”的文件 -
-perm
按照文件權限來查找文件。
find . -perm 755 –print 在當前目錄下查找文件權限位為755的文件,即文件屬主可以讀、寫、執行,其他用戶可以讀、執行的文件 -
-prune
使用這一選項可以使find命令不在當前指定的目錄中查找,如果同時使用-depth選項,那麽-prune將被find命令忽略。
find /apps -path "/apps/bin" -prune -o –print 在/apps目錄下查找文件,但不希望在/apps/bin目錄下查找
find /usr/sam -path "/usr/sam/dir1" -prune -o –print 在/usr/sam目錄下查找不在dir1子目錄之內的所有文件 -
-user
按照文件屬主來查找文件。
find ~ -user sam –print 在$HOME目錄中查找文件屬主為sam的文件 -
-group
按照文件所屬的組來查找文件。
find /apps -group gem –print 在/apps目錄下查找屬於gem用戶組的文件 -
-mtime -n +n
按照文件的更改時間來查找文件, - n表示文件更改時間距現在n天以內,+ n表示文件更改時間距現在n天以前。
find / -mtime -5 –print 在系統根目錄下查找更改時間在5日以內的文件
find /var/adm -mtime +3 –print 在/var/adm目錄下查找更改時間在3日以前的文件 -
-nogroup
查找無有效所屬組的文件,即該文件所屬的組在/etc/groups中不存在。
find / –nogroup -print -
-nouser
查找無有效屬主的文件,即該文件的屬主在/etc/passwd中不存在。
find /home -nouser –print -
-newer file1 ! file2
查找更改時間比文件file1新但比文件file2舊的文件。 -
-type
查找某一類型的文件,諸如:
b - 塊設備文件。
d - 目錄。
c - 字符設備文件。
p - 管道文件。
l - 符號鏈接文件。
f - 普通文件。
find /etc -type d –print 在/etc目錄下查找所有的目錄
find . ! -type d –print 在當前目錄下查找除目錄以外的所有類型的文件
find /etc -type l –print 在/etc目錄下查找所有的符號鏈接文件 -
-size n:[c] 查找文件長度為n塊的文件,帶有c時表示文件長度以字節計。
find . -size +1000000c –print 在當前目錄下查找文件長度大於1 M字節的文件
find /home/apache -size 100c –print 在/home/apache目錄下查找文件長度恰好為100字節的文件
find . -size +10 –print 在當前目錄下查找長度超過10塊的文件(一塊等於512字節) -
-depth:在查找文件時,首先查找當前目錄中的文件,然後再在其子目錄中查找。
find / -name "CON.FILE" -depth –print 它將首先匹配所有的文件然後再進入子目錄中查找 -
-mount:在查找文件時不跨越文件系統mount點。
find . -name "*.XC" -mount –print 從當前目錄開始查找位於本文件系統中文件名以XC結尾的文件(不進入其他文件系統) -
在使用xargs命令時,究竟是一次獲取所有的參數,還是分批取得參數,以及每一次獲取參數的數目都會根據該命令的選項及系統內核中相應的可調參數來確定。
find . -type f -print | xargs file 查找系統中的每一個普通文件,然後使用xargs命令來測試它們分別屬於哪類文件
find / -name "core" -print | xargs echo "" >/tmp/core.log 在整個系統中查找內存信息轉儲文件(core dump) ,然後把結果保存到/tmp/core.log 文件中:
find . -type f -print | xargs grep "hostname" 用grep命令在所有的普通文件中搜索hostname這個詞
find ./ -mtime +3 -print|xargs rm -f –r 刪除3天以前的所有東西 (find . -ctime +3 -exec rm -rf {} \;)
find ./ -size 0 | xargs rm -f & 刪除文件大小為零的文件
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]^ 錨定行的開始 如:‘^grep‘匹配所有以grep開頭的行。
$ 錨定行的結束 如:‘grep$‘匹配所有以grep結尾的行。
. 匹配一個非換行符的字符 如:‘gr.p‘匹配gr後接一個任意字符,然後是p。
.*一起用代表任意字符。
[^] 匹配一個不在指定範圍內的字符,如:‘[^A-FH-Z]rep‘匹配不包含A-R和T-Z的一個字母開頭,緊跟rep的行。
..
\< 錨定單詞的開始,如:‘\<grep‘匹配包含以grep開頭的單詞的行。
\> 錨定單詞的結束,如‘grep\>‘匹配包含以grep結尾的單詞的行。
\w 匹配一個文字和數字字符,也就是[A-Za-z0-9],如:‘G\w*p‘匹配以G後跟零個或多個文字或數字字符,然後是p。
\W w的反置形式,匹配一個非單詞字符,如點號句號等。\W*則可匹配多個。
\b 單詞鎖定符,如: ‘\bgrep\b‘只匹配grep,即只能是grep這個單詞,兩邊均為空格。
如果被\<和\>引用,就把表達式做為一個單詞搜索。
ls -l | grep ‘^a‘ 通過管道過濾ls -l輸出的內容,只顯示以a開頭的行。
grep ‘test‘ d* 顯示所有以d開頭的文件中包含test的行。
grep ‘test‘ aa bb cc 顯示在aa,bb,cc文件中匹配test的行。
grep ‘[a-z]‘ aa 顯示所有包含每個字符串至少有5個連續小寫字符的字符串的行。
grep ‘w(es)t.*‘ aa 如果west被匹配,則es就被存儲到內存中,並標記為1,然後搜索任意個字符(.*),這些字符後面緊跟著另外一個es(),找到就顯示該行。如果用egrep或grep -E,就不用""號進行轉義,直接寫成‘w(es)t.*‘就可以了。
grep -i pattern files :不區分大小寫地搜索。默認情況區分大小寫
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整個單詞,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分別顯示[number]行,
grep pattern1 | pattern2 files :顯示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :顯示既匹配 pattern1 又匹配 pattern2 的行。
find & grep 命令 in linux(轉)