Xargs入门

来自linux中国网wiki
跳到导航 跳到搜索
大多数 Linux 命令都会产生输出:文件列表、字符串列表等。但如果要使用其他某个命令并将前一个命令的输出作为参数该怎么办?例如,file 命令显示文件类型(可执行文件、ascii 文本等);你能处理输出,使其仅显示文件名,目前你希望将这些名称传递给 ls -l 命令以查看时间戳记。xargs 命令就是用来完成此项工作的。他允许你对输出执行其他某些命令。 

什么是i

今天遇到 i 参数 终于明白什么意思了

 -i, --replace[=R]            replace R in INITIAL-ARGS with names read
                                from standard input; if R is unspecified,
                                assume {}
 
 使用-i参数默认的前面输出用{}代替,-I参数可以指定其他代替字符,如例子中的[]
  

举例

#xargs rm 

#按时间排序,删除最后的10个文件 
ls -t | tail -10 | xargs rm -rf 


使用xargs执行mv

##批量mv 
[[email protected] pc]# find . -type f   -mtime +10  | grep txt
./3.txt
./1.txt
./2.txt
[[email protected] pcntl]# find . -type f   -mtime +10  | grep txt | xargs -i mv {} /data/
[[email protected] pcntl]# ls /data/
1  1.txt  2.txt  3.txt  a




#也可实现批量改名
 find . -type f   -mtime +10  | grep txt | xargs -i mv {} {}bak





[[email protected] jacky]# pwd
/home/test/tmp/jacky
[[email protected] jacky]# ls
file1  file2  file3
[[email protected] jacky]# ls ..
jacky
[[email protected] jacky]# find . -name "file*" | xargs -i mv {} ..
[[email protected] jacky]# ls
[[email protected] jacky]# ls ..
file1  file2  file3  jacky
[[email protected] jacky]#
=  find后执行xargs提示xargs: argument line too long解决方法:
  find . -type f -atime +20 -print0 | xargs -0 -l1 -t rm -f
-l1是一次处理一个
-t是处理之前打印出命令
  
 

其它

find /data/  -type f -mtime +10 |grep  1."*" |xargs -i cp  {} {}.bakk 
 
 find /path -type f -exec rm '{}' \;
 
 
 $ ls | xargs -t -i mv {} {}.bak
-i 选项告诉 xargs 用每项的名称替换 {}。-t 选项指示 xargs 先打印命令,然后再执行。
 
 
 
 
 
cat arg.txt aaa bbb ccc
aaa 
bbb 
ccc


xargs的一个选项-I,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次:
cat arg.txt | xargs -I {} ./sk.sh -p {} -l -p aaa -l -p bbb -l -p ccc -l


-p aaa -l 
-p bbb -l
-p ccc -l



 
 
 
 
 
 -d选项可以自定义一个定界符:
  echo "nameXnameXnameXname" | xargs -dX 
  name name name name


 



参考

xargs

find 命令-exec,xargs用法的一点总结 http://liuleideshitou.blog.51cto.com/2062845/719810

http://man.linuxde.net/xargs

Linux下xargs命令详解 http://blog.csdn.net/andy572633/article/details/7214534

每天一个linux命令(21):find命令之xargs http://www.cnblogs.com/peida/archive/2012/11/15/2770888.html

linux shell ls xargs rm 组合删除文件

linux shell ls xargs rm 组合删除文件