1. 程式人生 > >xargs 和 exec詳解

xargs 和 exec詳解

linux xargs exec cp

xargs 和 exec詳解


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


xargs應用


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


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


[[email protected] tmp]# touch 1.txt 2.txt 3.txt 4.txt

[[email protected] tmp]# ls

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

[[email protected]

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

[[email protected] 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可用於拷貝


[[email protected] tmp]# ls *.txt_bak |xargs -n1 -i{} cp {} /

[[email protected] tmp]# cd /

[[email protected] /]# 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可拷貝的時候進行重命名


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

[[email protected] tmp]# cd /

[[email protected] /]# 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的配合使用


運用一:刪除文件操作


[[email protected] ~]# cd /tmp

[[email protected] tmp]# ls

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

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

[[email protected] ~]# cd /tmp

[[email protected] tmp]# ls

filelist yum.log


運用二:重命名文件操作


[[email protected] /]# cd /tmp

[[email protected] tmp]# ls

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

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

[[email protected] ~]# cd /tmp

[[email protected] 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:[[email protected] ~]# find /tmp -name *.txt* -exec rm -rf {}\;##{}\中間要有空格!

find: 遺漏“-exec”的參數

[[email protected] ~]# find /tmp -name *.txt* -exec rm -rf {} \;

[[email protected] ~]# cd /tmp

[[email protected] tmp]# ls

filelist yum.log

例2:

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

這個命令也是把{}作為前面find出來的文件的替代符,後面的\為;的脫意字符,不然脫意字符,shell會把這裏的分號 ; 當做這個命令行

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


運用二:重命名文件


[[email protected] tmp]# ls

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

[[email protected] tmp]# cd

[[email protected] ~]# find /tmp -name *.txt_bak -exec mv {} {}.wtf \;

[[email protected] ~]# cd /tmp

[[email protected] tmp]# ls

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


運用三:拷貝文件並重命名


[[email protected] ~]# find / -name *.txt_bak -exec cp {} /tmp/{}.www \;

[[email protected] ~]# cd /tmp

[[email protected] tmp]# ls

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


本文出自 “聖騎士控魔之手” 博客,請務必保留此出處http://wutengfei.blog.51cto.com/10942117/1925244

xargs 和 exec詳解