xargs 和 exec詳解

weixin_34117211發表於2017-11-16

xargs 和 exec詳解 


exec主要和find一起配合使用,xargs比exec用的地方要多。


xargs應用


把管道符前面的輸出作為xargs後面的命令的輸入。好處在於可以簡化步驟。常常和find一起使用,#find . -mtime +10 |xargs rm


(1)xargs可以批量修改檔名,更精準一點的說法是批量增加檔名。


[root@shiyanji tmp]# touch 1.txt 2.txt 3.txt 4.txt

[root@shiyanji tmp]# ls

1.txt  2.txt  3.txt  4.txt  

[root@shiyanji tmp]# ls *.txt|xargs -n1 -i{} mv {} {}_bak ##-i{} 中間不能有空格 可以只跟-i

[root@shiyanji tmp]# ls

1.txt_bak  2.txt_bak  3.txt_bak  4.txt_bak  

注:

xargs -n1 -i{} 類似for迴圈,-n1的意思是一個一個物件的去處理-i{} 把前面列出的物件用{}取代,mv {} {}_bak 相當於重新命名。很實用的命令,掌握。-n1可以省略不要!


(2)xargs可用於拷貝


[root@shiyanji tmp]# ls *.txt_bak |xargs -n1 -i{} cp {} /

[root@shiyanji tmp]# cd /

[root@shiyanji /]# ls

1.txt_bak  4.txt_bak  dev   lib         mnt   root     srv  usr

2.txt_bak  bin        etc   lost+found  opt   sbin     sys  var

3.txt_bak  boot       home  media       proc  selinux  tmp

注:上面的操作意思是將/tmp目錄下的*.txt_bak檔案拷貝到根目錄下。


(3)xargs可拷貝的時候進行重新命名


[root@shiyanji tmp]# ls *.txt_bak |xargs -n1 -i{} cp {} /{}.bak ##/{}.bak中間沒有空格

[root@shiyanji tmp]# cd /

[root@shiyanji /]# ls

1.txt_bak      3.txt_bak      bin   home        mnt   sbin     tmp

1.txt_bak.bak  3.txt_bak.bak  boot  lib         opt   selinux  usr

2.txt_bak      4.txt_bak      dev   lost+found  proc  srv      var

2.txt_bak.bak  4.txt_bak.bak  etc   media       root  sys

注:上面的操作是將/tmp目錄下的*.txt_bak拷貝到根目錄並重新命名為*.txt_bak.bak。


(4)xargs與find的配合使用


運用一:刪除檔案操作


[root@shiyanji ~]# cd /tmp

[root@shiyanji tmp]# ls

1.txt_bak  2.txt_bak  3.txt_bak  4.txt_bak  filelist  yum.log

[root@shiyanji ~]# find /tmp  -name *.txt_bak |xargs -n1 -i{} rm -rf {}

[root@shiyanji ~]# cd /tmp

[root@shiyanji tmp]# ls

filelist  yum.log


運用二:重新命名檔案操作


[root@shiyanji /]# cd /tmp

[root@shiyanji tmp]# ls

1.txt_bak  2.txt_bak  3.txt_bak  4.txt_bak  filelist  yum.log

[root@shiyanji ~]# find /tmp -name *.txt_bak |xargs -n1 -i{} mv {} {}.wtf

[root@shiyanji ~]# cd /tmp

[root@shiyanji tmp]# ls

1.txt_bak.wtf  2.txt_bak.wtf  3.txt_bak.wtf  4.txt_bak.wtf  filelist  yum.log


exec 應用


find命令時,經常使用一個選項就是 -exec,可以達到和xargs一樣的效果。

運用一:刪除檔案


例1:[root@shiyanji ~]# find /tmp -name *.txt* -exec rm -rf {}\;##{}\中間要有空格!

find: 遺漏“-exec”的引數

[root@shiyanji ~]# find /tmp -name *.txt* -exec rm -rf {} \;

[root@shiyanji ~]# cd /tmp

[root@shiyanji tmp]# ls

filelist  yum.log

例2:

#find . -mtime +10 -exec rm -rf {} \;

這個命令也是把{}作為前面find出來的檔案的替代符,後面的\為;的脫意字元,不然脫意字元,shell會把這裡的分號 ; 當做這個命令列

的結尾,認為後面還有其他的任務。-exec也能實現上面的更改檔名的需求。


運用二:重新命名檔案


[root@shiyanji tmp]# ls

1.txt_bak  2.txt_bak  3.txt_bak  4.txt_bak

[root@shiyanji tmp]# cd

[root@shiyanji ~]# find /tmp -name *.txt_bak -exec mv {} {}.wtf \;

[root@shiyanji ~]# cd /tmp

[root@shiyanji tmp]# ls

1.txt_bak.wtf  2.txt_bak.wtf  3.txt_bak.wtf  4.txt_bak.wtf


運用三:拷貝檔案並重新命名


[root@shiyanji ~]# find / -name *.txt_bak -exec cp {} /tmp/{}.www \;

[root@shiyanji ~]# cd /tmp

[root@shiyanji tmp]# ls

1.txt_bak.www  2.txt_bak.www  3.txt_bak.www  4.txt_bak.www





     本文轉自品鑑初心51CTO部落格,原文連結:http://blog.51cto.com/wutengfei/1925244,如需轉載請自行聯絡原作者





相關文章