xargs 和 exec详解

简介:

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,如需转载请自行联系原作者





相关文章
|
7月前
|
Linux
认识Linux指令之 “find grep” 命令
认识Linux指令之 “find grep” 命令
130 1
认识Linux指令之 “find grep” 命令
|
7月前
|
数据处理 Perl
AWK 命令20条
AWK 命令示例:显示文件内容、按列打印、计数、使用分隔符、模式匹配、条件语句、数学计算、数组操作、字符串处理、循环、输出格式控制、删除重复行、统计行词字符、分组统计、格式化输出、字段联合、自定义分隔符、字符串截取和调用外部命令。AWK 是强大的文本分析工具,适用于各种数据处理任务。
143 1
|
7月前
|
Unix Shell Linux
shell命令之cat
shell命令之cat
314 1
|
Arthas Java 测试技术
Arthas中cat 、cls、echo、grep基础命令应用
通过本教程的操作,您可以体验如何Alibaba Cloud Linux  2.1903 LTS 64位操作系统的云服务器上学习cat 、cls、echo、grep基础命令教程用法。
|
Shell Linux 开发工具
为什么在“-bash: XX: command not found”下常用命令如“cat”,“ls”变得不可用?
先看这个信息 “-bash: XX: command not found” 直译过来就是bash找不到相应的命令前文里我们提到这个问题是由于"PATH"设置出错导致我们输入这些常用命令如"ls","cat","vim"等我们之前解决这个问题的方法是 '键入"export PATH=/usr/bin.
12412 0