Linux:使用xargs为其他命令提供参数
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
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
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献12条内容
所有评论(0)