find命令和exec xargs 命令

2022-09-04 03:09:10 字數 1611 閱讀 3223

將指定目錄內的所有.out檔案 cp 到/tmp 目錄:

find /home/pirate/ -name "*.out" -exec cp {} /tmp/ \;

其中,{} 表示當前find查詢出來的檔名, ;是exec的結束符並用\轉義

如何用xargs來實現呢,用下面這個命令是不行的 :

find /home/pirate/ -name "*.out" -type f |xargs cp /tmp/ 

echo 一下就會發現這條語句的執行實際上是:

find /home/pirate/ -name "*.out" -type f |xargs echo cp /tmp/

cp /tmp/ /home/pirate/a.out

也就是說他把/tmp/ 當作拷貝引數,而不是拷貝的目標

正確的命令如下:

find /home/pirate/ -name "*.out" -type f |xargs -i {} cp {} /tmp/  

或者:find /home/pirate/ -name "*.out" -type f |xargs -i cp {} /tmp/  

加 -i 引數直接用 {}就能代替管道之前的標準輸出的內容。

加 -i 引數 需要事先指定替換字元

exec 和 xargs的區別:

exec 引數是乙個乙個傳遞的,每找到乙個結果都會forck乙個程序來執行,比如find總共找到了10個結果,exec會執行10次

xargs 一次性的將所有引數傳給命令,比如find找到了10個結果,xargs將這是個結果組合到一起執行cp操作,但是使用xargs的前提是命令支援多個引數

exec 每處理乙個檔案或者目錄,它都需要啟動一次命令,效率不好; 

exec 格式麻煩,必須用 {} 做檔案的代位符,必須用 \; 作為命令的結束符,書寫不便。

xargs 不能操作檔名有空格的檔案;

1、壓縮所有的日誌檔案到每乙個檔案

find ./ -type f -name "*.log" | xargs -i -t tar -zcvf {}.tar.gz {}

2、壓縮所有的檔案到乙個檔案

3、檔案內容替換

find ./ -maxdepth 2 -name a -print | xargs -t -i sed -i '1 i\111' '{}'

4、許可權修改

find ./ -perm -7 -print | xargs chmod o-w

5、檢視檔案型別

find ./ -type f -print | xargs file

6、刪除多個檔案

find ./ -name "*.log" -print0 | xargs -i -0 rm -f {}

7、複製多個檔案

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

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

xargs -t 意思是先列印命令,然後再執行

find命令和xargs命令

xargs 傳參 實時查詢檔案,查詢速度慢,精確 find 路徑 選項 檔案 引數 name 按檔名查詢 perm 按檔案許可權查詢 prune 可以使find不在當前指定目錄下查詢 user 按檔案屬主查詢 mtime 按檔案時間查詢 type b d c p l f 檔案型別,塊裝置 目錄 字元...

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 和grep

一般來說,find 是指查詢檔案,以檔名為依據,當然也可以指目錄,而grep是查詢字串,以查詢內容為主。當然二者還可以混合使用。find 格式 find path options tests actions 幾個簡單例子 find name test.txt print find type d te...