每天学一点儿shell:xargs 命令

2024-05-28 23:48

本文主要是介绍每天学一点儿shell:xargs 命令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、标准输入和管道
  • 二、xargs命令的作用
  • 三、xargs命令的实例
    • 1、创建多个文件目录
    • 2、多行内容变单行输出
    • 3、将内容按照","分隔
    • 4、找到所有的txt文件并压缩
    • 5、找到所有的txt文件并删除(慎用)
    • 6、配合ps和kill批量杀掉进程(实用)
    • 7、配合cp将文件拷贝到多个目录(实用)

一、标准输入和管道

举一个例子:

[root@hadoop-master test-grep]# cat -n ./file.txt | grep leo1	leo hello2	leo2 hello23	leo3 hello3

上面这个例子使用了管道命令(|),管道命令的作用是将左侧的命令(cat -n ./file.txt )的标准输出作为右边的标准输入,提供给右边的命令(grep leo)作为参数。因此上面的代码等同于如下:

[root@hadoop-master test-grep]# grep -n leo file.txt 
1:leo hello
2:leo2 hello2
3:leo3 hello3

但是大多数命令都不接收标准输入作为参数,只能直接在命令行输入参数,这导致无法用管道命令传递参数。
例如下面的语句是没有任何输出的

[root@hadoop-master test-grep]# echo "leo" | echo[root@hadoop-master test-grep]# 

二、xargs命令的作用

xargs命令的作用,是将标准输入转为命令行参数。

[root@hadoop-master test-grep]# echo "leo" | xargs  echo
leo

xargs命令格式如下:

xargs [OPTION]... COMMAND INITIAL-ARGS...

整整执行的命令是紧跟在xargs后面的COMMAND,接收xargs传来的参数
例如:

[root@hadoop-master test-grep]# echo "one two three" | xargs mkdir
[root@hadoop-master test-grep]# ll
总用量 8
drwxrwxrwx. 2 root root 22 9月  22 16:53 dir2
-rwxrwxrwx. 1 root root 60 9月  22 16:48 file2.text
-rwxrwxrwx. 1 root root 45 9月  21 23:07 file.txt
drwxr-xr-x. 2 root root  6 9月  26 17:42 one
drwxr-xr-x. 2 root root  6 9月  26 17:42 three
drwxr-xr-x. 2 root root  6 9月  26 17:42 two

上面这个命令是创建one two three 三个目录,如果不加xargs会报如下错误:

[root@hadoop-master test-grep]# echo "one two three" | mkdir
mkdir: 缺少操作数
Try 'mkdir --help' for more information.
选项解释
-afile 从文件中读入作为sdtin
-eflag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
-p当每次执行一个argument的时候询问一次用户。
-nnum 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-t表示先打印命令,然后再执行。
-i或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
-rno-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
-snum 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
-Lnum 从标准输入一次读取 num 行送给 command 命令。
-l同 -L。
-ddelim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
-xexit的意思,主要是配合-s使用。。
-P修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到的吧。

三、xargs命令的实例

1、创建多个文件目录

[root@hadoop-master test-grep]# echo "one two three" | mkdir

递归创建多个文件目录:

[root@hadoop-master dir1]# echo "dir1/20201011 dir2/20201011 dir3/20201011"|xargs mkdir -p

2、多行内容变单行输出

[root@hadoop-master test-grep]# cat file.txt 
leo hello
leo2 hello2
leo3 hello3
hello grep
[root@hadoop-master test-grep]# cat file.txt | xargs 
leo hello leo2 hello2 leo3 hello3 hello grep

3、将内容按照","分隔

[root@hadoop-master test-grep]# echo "leo,leo,leo" | xargs -d','
leo leo leo

4、找到所有的txt文件并压缩

[root@hadoop-master test-grep]# find . -type f -name "*.txt" -print | xargs tar -czvf txts.tar.gz
./file.txt
./dir2/file.txt

5、找到所有的txt文件并删除(慎用)

[root@hadoop-master test-grep]# find . -type f -name "*.txt" -print0 | xargs -0 rm -f

删除符合条件的目录下文件,目录结构如下,需要删除时间是20201011下的文件:

[root@hadoop-master dir1]# tree
.
├── dir1
│   └── 20201011
├── dir2
│   ├── 20201011
│   │   └── file2.txt
│   ├── 20201012
│   │   └── file2.txt
│   └── 20201013
│       └── file2.txt
└── dir3└── 20201011└── file.txt

命令如下:

[root@hadoop-master dir1]# find . -type f -name "*.txt" -print0 | grep -FzZ '20201011' | xargs -0 rm -f
[root@hadoop-master dir1]# tree
.
├── dir1
│   └── 20201011
├── dir2
│   ├── 20201011
│   ├── 20201012
│   │   └── file2.txt
│   └── 20201013
│       └── file2.txt
└── dir3└── 20201011

如果没有tree命令,可以使用yum下载一个:

[root@hadoop-master dir1]# yum install tree

6、配合ps和kill批量杀掉进程(实用)

[root@hadoop-master test-grep]# ps -ef|grep -v 'grep'|grep '测试程序'|awk '{print $2}'|xargs kill -9

7、配合cp将文件拷贝到多个目录(实用)

[root@hadoop-master BJ]# echo 20201011 20201012 20201013 | xargs -n 1 cp -v ./test01.txt 

打印结果:
图7
20201011、20201012、20201013 是三个目录,。/test01.txt代表需要复制的文件
-n 1 :表示每一个命令行只有一个参数,并且传给cp命令
cp :表示复制命令
-v:verbose表示将复制过程中的详细信息显示出来

当然可以正则匹配目录和文件名:

[root@hadoop-master dir1]# echo */20201011 | xargs -n 1 cp -v ./*.txt 
"./file1.txt" -> "dir1/20201011/file1.txt"
"./file2.txt" -> "dir1/20201011/file2.txt"
"./file1.txt" -> "dir2/20201011/file1.txt"
"./file2.txt" -> "dir2/20201011/file2.txt"
"./file1.txt" -> "dir3/20201011/file1.txt"
"./file2.txt" -> "dir3/20201011/file2.txt"

这篇关于每天学一点儿shell:xargs 命令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1012039

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自

Linux命令rm如何删除名字以“-”开头的文件

《Linux命令rm如何删除名字以“-”开头的文件》Linux中,命令的解析机制非常灵活,它会根据命令的开头字符来判断是否需要执行命令选项,对于文件操作命令(如rm、ls等),系统默认会将命令开头的某... 目录先搞懂:为啥“-”开头的文件删不掉?两种超简单的删除方法(小白也能学会)方法1:用“--”分隔命

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

Linux grep 命令的使用指南

《Linuxgrep命令的使用指南》本文给大家介绍Linuxgrep命令的使用指南,包括基础搜索语法、实践指南,感兴趣的朋友跟随小编一起看看吧... 目录linux grep 命令全面使用指南一、基础搜索语法1. 基本文本搜索2. 多文件搜索二、常用选项详解1. 输出控制选项2. 上下文控制选项三、正则表达