Linux:使用xargs为其他命令提供参数
来源:互联网 发布:w10安装不了软件 编辑:程序博客网 时间:2024/06/05 14:23
Linux:使用xargs为其他命令提供参数
最简单的一个例子,想用ls -l查看某个文件的属性,文件名是一个参数,这个参数可以由xargs来提供:
qingsong@db2a:/tmp$ xargs ls -l
example.txt <-手动输入文件名,回车,再Ctrl+d
-rw-rw-r-- 1 qingsong qingsong 27 Aug 24 23:04 example.txt
示例1:多行输入转化为单行输出:
qingsong@db2a:/tmp$ cat example.txt
1 2 3 4 5 6
7 8 9 10
11 12
qingsong@db2a:/tmp$ cat example.txt | xargs
1 2 3 4 5 6 7 8 9 10 11 12
示例2:将单行输入转换成多行输出,-n 3表示每行最多有三个参数:
qingsong@db2a:/tmp$ cat example2.txt
1 2 3 4 5 6 7 8 9 10 11 12
qingsong@db2a:/tmp$ cat example2.txt | xargs -n 3
1 2 3
4 5 6
7 8 9
10 11 12
示例3:使用-d指定分割符:
qingsong@db2a:/tmp$ echo "splitXsplitXsplitXsplit" | xargs -d X
split split split split
示例4:配合find命令
配合find命令,也是很厉害的,有些人(包括以前的我)喜欢在find命令找到对应的文件后,直接删除,一般如下:
find <path> <parameters> | xargs rm -rf
一般情况下,是没有问题的,但有特殊的情况,就是文件名中包含空格,这时候就会出现大问题
例如,下面的find命令找到了两个文件,其中第2个文件的文件名有空格:
qingsong@db2a:/tmp$ sudo find /tmp -name "*.data"
/tmp/file1.data
/tmp/New file2.data
使用xargs处理之后,变为下面的样子:
qingsong@db2a:/tmp$ sudo find /tmp -name "*.data" | xargs
/tmp/file1.data /tmp/New file2.data
如果使用-n 1来看每一个参数,就能看到由于空格的原因,xargs把它处理成了三个参数:
qingsong@db2a:/tmp$ sudo find /tmp -name "*.data" | xargs -n 1
/tmp/file1.data
/tmp/New
file2.data
这种情况时,如果发出 find /tmp -name "*.data" | xargs rm -f 命令,那么会尝试删除三个文件 /tmp/file1.data、/tmp/New 和 当前目录下的file2.data
可以通过下面的办法来避免:
find /tmp -name "*.data" -print0 | xargs -0 /bin/rm -f
其中find命令的print0表示以'\0'结束文件名,即 null character,而xargs 的 "-0"参数,表示以 null character为作分割符:
qingsong@db2a:/tmp$ sudo find /tmp -name "*.data" -print0
/tmp/file1.data/tmp/New file2.dataqingsong@db2a:/tmp$
可以看到,被正确地处理为2个参数:
qingsong@db2a:/tmp$ sudo find /tmp -name "*.data" -print0 | xargs -0 -n 1
/tmp/file1.data
/tmp/New file2.data
另补充一点,find命令本身自带-delete参数,就足以实现删除功能,而且不会产生新的进程,有助于效率的提升
示例5:统计出/tmp目录下所有脚本文件(*.sh)的行数
qingsong@db2a:/tmp$ sudo find /tmp -name "*.sh" -print0 | xargs -0 wc -l
qingsong@db2a:/tmp$ sudo find /tmp -name "*.sh" -print0 | xargs -0 wc -l 5 /tmp/variables.sh 14 /tmp/clock2.sh 6 /tmp/read.sh 18 /tmp/sleep.sh 12 /tmp/time_take.sh 7 /tmp/user.sh 11 /tmp/latch.sh 9 /tmp/inputpwd.sh 12 /tmp/clock.sh 6 /tmp/price.sh 11 /tmp/dir2/latch.sh 13 /tmp/fun.sh 7 /tmp/judge.sh 7 /tmp/printf.sh 138 total
阅读全文
0 0
- Linux:使用xargs为其他命令提供参数
- linux xargs命令使用
- Linux xargs参数代换命令
- find命令的xargs参数的使用---Linux学习笔记
- Linux xargs命令的使用
- linux命令之参数代换:xargs
- 参数代换命令xargs使用小结
- Linux命令-find及xargs的使用
- 如何在Linux里使用xargs命令
- 如何在Linux里使用xargs命令
- 如何在Linux里使用xargs命令
- Linux命令-find及xargs的使用
- 如何在Linux里使用xargs命令
- linux xargs传递参数
- Linux中的Xargs命令,支持|管道传递参数
- linux命令: xargs
- Linux中的xargs命令
- Linux xargs命令
- C++ 动态捕获整型数列
- ubutu tomcat 启用80端口步骤
- 同一窗口下基于KCF 目标跟踪和基于模板匹配的目标跟踪效果比较
- 使用jQuery库出错:index.jsp:16 Uncaught ReferenceError: $ is not defined
- 函数中返回字符串的方法
- Linux:使用xargs为其他命令提供参数
- iOS OC内存分析优化~笔记
- Iput设备使用分析--2(应用层面)
- 189. Rotate Array
- C#基础-016 循环
- 邻接表的创建
- 深度学习方法(十四):轻量级CNN网络设计——MobileNet,ShuffleNet,文末有思考
- JAVA中的反射机制
- 1016