find 命令grep exec xargs組合

2021-09-23 15:25:27 字數 2784 閱讀 3741

首先了解基本命令:

linux 經常需要進行檔案查詢。其中查詢的命令主要有find和grep。兩個命令是有區的

(1)find命令是根據檔案的屬性進行查詢,如檔名,檔案大小,所有者,所屬組,是否為空,訪問時間,修改時間等。 

(2)grep是根據檔案的內容進行查詢,會對檔案的每一行按照給定的模式(patter)進行匹配查詢。

一、find 命令:

find   path   -option   [   -print ]   [ -exec   -ok   command ]   {}  \;
部分引數說明: 

-exec:對找到的檔案執行exec這個引數所指定的shell命令,相應的形式為:-exec command {}   \; 將查到的檔案進行command操作,」{}」就代替查到的檔案。 

-ok : 系統會讓使用者確定是否執行例子:

#將目前目錄及其子目錄下所有最近 20 天內更新過的檔案列出 

find . -ctime -20

#查詢/var/log目錄中更改時間在7日以前的普通檔案,並在刪除之前詢問它們:

find /var/log -type f -mtime +7 -ok rm {} \;

# 查詢前目錄中檔案屬主具有讀、寫許可權,並且檔案所屬組的使用者和其他使用者具有讀許可權的檔案:

find . -type f -perm 644 -exec ls -l {} \;

# 為了查詢系統中所有檔案長度為0的普通檔案,並列出它們的完整路徑:

find / -type f -size 0 -exec ls -l {} \;

#查詢空資料夾

find -type d -empty

二、 grep 命令:

grep命令用於查詢檔案裡符合條件的字串 

grep 用法略...

三、xargs  命令:      

somecommand |xargs -item  command
xargs 是給命令傳遞引數的乙個過濾器,也是組合多個命令的乙個工具。

xargs 可以將管道或標準輸入(stdin)資料轉換成命令列引數,也能夠從檔案的輸出中讀取資料。可以將單行或多行文字輸入轉換為其他格式,例如多行變單行,單行變多行;

引數說明:

-a file 從檔案中讀入作為sdtin

-e flag ,注意有的時候可能會是-e,flag必須是乙個以空格分隔的標誌,當xargs分析到含有flag這個標誌的時候就停止。

-p 當每次執行乙個argument的時候詢問一次使用者。

-n num 後面加次數,表示命令在執行的時候一次用的argument的個數,預設是用所有的。

-t 表示先列印命令,然後再執行。

-i 或者是-i,這得看linux支援了,將xargs的每項名稱,一般是一行一行賦值給 {},可以用 {} 代替。

-r no-run-if-empty 當xargs的輸入為空的時候則停止xargs,不用再去執行了。

-s num 命令列的最大字元數,指的是 xargs 後面那個命令的最大命令列字元數。

-l num 從標準輸入一次讀取 num 行送給 command 命令。

-l 同 -l。

-d delim 分隔符,預設的xargs分隔符是回車,argument的分隔符是空格,這裡修改的是xargs的分隔符。

-x exit的意思,主要是配合-s使用。。

-p 修改最大的程序數,預設是1,為0時候為as many as it can ,這個例子我沒有想到,應該平時都用不到的吧。

find . -name  "*.txt"  | xargs rm -rf {}

find /home/ -iname "*.sh" |xargs -i {} ls -li {}

#-i 表示 find 傳遞給xargs的結果 由{}來代替

find /root/ -type f -name "*.sh" | xargs -i cp {} /tmp/

#查詢所有的jpg 檔案,並且壓縮它

find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz

四、xargs 與 exec區別

-exec 

1.引數是乙個乙個傳遞的,傳遞乙個引數執行一次,效率低 

2.檔名有空格等特殊字元也能處理 

-xargs  

1.一次將引數傳給命令,可以使用-n控制引數個數 

2.處理特殊檔名需要採用如下方式:find . -name "*.txt" -print0 |xargs -0 rm {}   

find -print0  與 xargs -0 的結合避免檔名有特殊字元如空格,引號等無法處理

五、舉例說明:

#搜尋檔案中含有「resines」字串

find . -name "*.text" | xargs grep resines

#搜尋檔名中含有的resines

find . -name "*.text" | grep resines

#xargs還有指定引數位置的作用。假設我們要將目錄下所有的.py檔案放到python目錄中去,

#引數-i指定了管道前命令作為引數所應該在管道後面命令的位置。

find . -name '*.py' | xargs -i {} mv {} ./python

find 命令 Linux命令篇 find命令

find name txt o name pdf print演示結果 find regex txt pdf iregex 忽略大小寫的正則 查詢所有非txt文字 find name txt print演示結果 列印出當前目錄的檔案 深度為1 find maxdepth 1 type f演示結果 5....

find命令 echo命令

find命令 find 起始目錄 尋找條件 查詢的字串 操作 起始目錄 表示 home目錄 表示當前目錄 表示根目錄 尋找條件 常用的 name 按照名字查詢 perm 安裝許可權查詢 prune 不再當前指定的目錄下查詢 user 檔案屬主來查詢 group 檔案所屬組來查詢 nogroup 查詢...

Linux 命令 find 命令

find是日常工具箱中功能更強大 更靈活的命令列工具之一,因此值得花費更多的時間。最簡單的,find跟上路徑尋找一些東西。例如 find 它將找到 並列印出 系統中的每個檔案。而且由於一切都是檔案,你會得到很多需要整理的輸出。這可能不能幫助你找到你要找的東西。你可以改變路徑引數來縮小範圍,但它不會比...