每天学一点儿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

相关文章

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

MySQL的ALTER TABLE命令的使用解读

《MySQL的ALTERTABLE命令的使用解读》:本文主要介绍MySQL的ALTERTABLE命令的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、查看所建表的编China编程码格式2、修改表的编码格式3、修改列队数据类型4、添加列5、修改列的位置5.1、把列

Linux实现简易版Shell的代码详解

《Linux实现简易版Shell的代码详解》本篇文章,我们将一起踏上一段有趣的旅程,仿照CentOS–Bash的工作流程,实现一个功能虽然简单,但足以让你深刻理解Shell工作原理的迷你Sh... 目录一、程序流程分析二、代码实现1. 打印命令行提示符2. 获取用户输入的命令行3. 命令行解析4. 执行命令

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设