每天学一点儿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查询服务器 IP 地址的命令详解

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

Linux grep 命令的使用指南

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

DNS查询的利器! linux的dig命令基本用法详解

《DNS查询的利器!linux的dig命令基本用法详解》dig命令可以查询各种类型DNS记录信息,下面我们将通过实际示例和dig命令常用参数来详细说明如何使用dig实用程序... dig(Domain Information Groper)是一款功能强大的 linux 命令行实用程序,通过查询名称服务器并输

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin