xargs命令 ############ 将前一个命令的标准输出传递给下一个命令,作为它的参数 xargs的默认命令是echo xargs与管道|的区别:: | 用来将前一个命令的标准输出传递到下一个命令的标准输入 xargs 将前一个命令的标准输出传递给下一个命令,作为它的参数 xargs与exec的区别:: 1.exec参数是一个一个传递的,传递一个参数执行一次命令 xargs一次将参数传给命令,可以使用-n控制参数个数 2.exec文件名有空格等特殊字符也能处理 xargs不能处理特殊文件名,如果想处理特殊文件名需要特殊处理 -d, -n选项:: -d: 指定分隔符, 默认按「空格」分隔 -n: 指定一行显示个数 % 按:分隔,每行显示3个 $> echo "a:b:c:d:e" | xargs -d : -n 3 a b c d e -p选项:: 输出即将要执行的完整的命令,询问是否执行 执行输入y 否则输入n 注: 主要用于检查命令是否正确 -0 选项:: 表示以 '\0' 为分隔符,一般与find结合使用 % -print0: find输出的每条结果后面加上 '\0' 而不是换行 $> find . -name "*.txt" -print0 | xargs -0 echo % 统计目录中所有php文件列表中每个文件的行数 $>find . -type f -name "*.php" -print0 | xargs -0 wc -l -I选项:: -I:指定一个替换字符串{} $> cat arg.txt aaa bbb ccc $> cat arg.txt | xargs -I {} ls -p {} -l 等同于执行以下3条命令 ls -p aaa -l ls -p bbb -l ls -p ccc -l 其他:: -E 选项(有的系统的xargs版本可能是-e eof-str):: 只会将-e指定的命令行参数之前的参数(不包括-e指定的这个参数)传递给xargs后面的命令 注: 指定-d选项时,此选项失效 实例:: % 如有src目录下有子目录, 在apps/octopuscloud/src中也新建目录 find src/ -name *.erl | xargs -I {} dirname {} | xargs -I {} mkdir -p apps/octopuscloud/{} % 把src目录下各级目录下的所有.erl文件,移动到 apps/目录下,并保持原目录结构不变 find src -name *.erl | xargs -I {} mv {} apps/octopuscloud/{} % 查找所有的jpg 文件,并且压缩它们: $> find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz % 假如你有一个文件包含了很多你希望下载的URL,你能够使用xargs下载所有链接: cat url-list.txt | xargs wget -c % 删除指定进程 ps aux |grep "device_attribute_update" |grep tmp | awk -F' ' '{print $2}' | xargs -I {} kill {} % 把所有的压缩文件解压出来 ls *.rar | xargs -I {} unrar x -o- -y {}