將指定目錄內的所有.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...