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

时间: 2024-11-05 16:07:04

xargs 和 exec详解的相关文章

xargs和exec详解、screen命令、curl命令

1.xargs和exec详解xargs execfind /var/log/  -type f  -mtime +10   (超过10天的文件)find /var/log/  -type f  -mtime +10  -exec cp {} {}.bak \; (将找到的文件都复制成.bak文件)find /var/log/  -type f  -mtime +10  |xargs  -i cp {}  {}.1  (复制重命名)ls |xargsls x* ls x*  |xargs rmls

xargs和exec详解

find -exec [[email protected] ~]# find /var/log/ -type f -mtime +10 -exec cp {} {}.bak \; xargs [[email protected] ~]# find /var/log/ -type f -mtime +10 | xargs -i cp {} {}.bak 说明:这两种用法效果一样. xargs也可以与其他命令联合使用 [[email protected] ~]# ls *.txt | xargs -

xargs与exec详解

一.场景 这个命令是错误的 1 find ./ -perm +700 |ls -l 这样才是正确的 1 find ./ -perm +700 |xargs ls -l  二.用法 1 2 3 4 5 6 7 8 9 10 11 12 [[email protected] tmp]# xargs --help Usage: xargs [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]        [-E eof-str] [-e[e

linux shell脚本学习xargs命令使用详解

作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题 xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据.xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代. xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传

linux下xargs命令用法详解 【转】

xargs在linux中是个很有用的命令,它经常和其他命令组合起来使用,非常的灵活.xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.由此 这个命令也是后置引用的一个强有力的替换.在一般使用过多参数的命令替换失败的时候,用xargs来替换它一般都能成功.通常情况下,xargs从管道或 者stdin中读取数据,但是它也能够从文件的输出中读取数据.xargs的默认命令是echo.这意味着通过管道传递给xargs的输入将

转 linux下xargs命令用法详解

xargs在linux中是个很有用的命令,它经常和其他命令组合起来使用,非常的灵活. xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.由此 这个命令也是后置引用的一个强有力的替换.在一般使用过多参数的命令替换失败的时候,用xargs来替换它一般都能成功.通常情况下,xargs从管道或 者stdin中读取数据,但是它也能够从文件的输出中读取数据. xargs的默认命令是echo.这意味着通过管道传递给xargs的输

Python进程分支fork和exec详解

在python中,任务并发一种方式是通过进程分支来实现的.在linux系统在,通过fork()方法来实现进程分支. fork()调用后会创建一个新的子进程,这个子进程是原父进程的副本.子进程可以独立父进程外运行. fork()是一个很特殊的方法,一次调用,两次返回. fork()它会返回2个值,一个值为0,表示在子进程返回;另外一个值为非0,表示在父进程中返回子进程ID. 以下只能在linux中运行,不能在window下运行. 进程分支fork() 实例如下: #!/usr/bin/python

Java魔法堂:找外援的利器——Runtime.exec详解

一.前言 Java虽然五脏俱全但总有软肋,譬如获取CPU等硬件信息,当然我们可以通过JNI调用C/C++来获取,但对于对C/C++和Windows API不熟的码农是一系列复杂的学习和踩坑过程.那能不能通过简单一些.学习成本低一些的方式呢?答案是肯定的,在功能实现放在首位的情况下,借他山之石是最简洁有力的做法.而 Runtime.exec方法 就为我们打开这么的一条路了. 二.认识 java.lang.Runtime.exec方法    作用:用于调用外部程序,并重定向外部程序的标准输入.标准输

xargs -i参数详解

学习所需,文章装载过来! xargs与find经常结合来进行文件操作,平时删日志的时候只是习惯的去删除,比如 # find . -type f -name "*.log" | xargs rm -rf * 就将以log结尾的文件删除了,如果我想去移动或者复制就需要使用参数来代替了. xargs -i 参数或者-I参数配合{}即可进行文件的操作. -I replace-str Replace occurrences of replace-str in the initial-argume