美文网首页生物信息-生物统计
Linux中xargs命令的使用方法

Linux中xargs命令的使用方法

作者: 育种数据分析之放飞自我 | 来源:发表于2019-05-08 19:39 被阅读4次

1. 背景

xargs可以高效对文件批量处理:

  • 比如你要在不同的文件夹下创建同一个文件
  • 比如你想根据某个查询条件, 批量删除符合条件的文件
  • 比如你想对不同文件夹中的文件进行更新

笨笨的方法, 是一个一个的进行复制, 比如cd xxx;ls;cp xxx yyy; cd ../; 其实, xargs可以非常优雅的进行批量的操作. 下面用几个例子, 演示一下xargs的用法. 一个坑就是使用echo和ls的问题, 这里进行了测试.

2. 创建文件

创建6个文件夹y1 ~ y6, 创建一个文件: hello_world.txt

(base) [dengfei@localhost xargs]$ mkdir y1 y2 y3 y4 y5 y6
(base) [dengfei@localhost xargs]$ cat >hello_world.txt
hello world
我是邓飞
公众号为:育种数据分析之放飞自我
没错, 这样打广告是最棒的

使用tree查看目录结构:

(base) [dengfei@localhost xargs]$ tree
.
├── hello_world.txt
├── y1
├── y2
├── y3
├── y4
├── y5
└── y6

6 directories, 1 file

3. 将hello_world.txt批量copy到六个文件夹中

命令:

  • 这里使用ls -d仅仅打印文件夹名称, 而不打印文件夹里面的内容
  • xargs -i是定义对象的位置, 匹配的是{}, 它会将前面的对象, 放到{}的位置
ls -d y*|xargs -i cp hello_world.txt {}

效果:

(base) [dengfei@localhost xargs]$ tree
.
├── hello_world.txt
├── y1
│   └── hello_world.txt
├── y2
│   └── hello_world.txt
├── y3
│   └── hello_world.txt
├── y4
│   └── hello_world.txt
├── y5
│   └── hello_world.txt
└── y6
    └── hello_world.txt

6 directories, 7 files

搞定
**坑1: **
使用ls y*, 而不是ls -d y*, 达不到理想的效果:

(base) [dengfei@localhost xargs]$ tree
.
├── hello_world.txt
├── y1
├── y1:
├── y2
├── y2:
├── y3
├── y3:
├── y4
├── y4:
├── y5
├── y5:
├── y6
└── y6:

6 directories, 7 files
(base) [dengfei@localhost xargs]$ ls
hello_world.txt  y1  y1:  y2  y2:  y3  y3:  y4  y4:  y5  y5:  y6  y6:

这是因为:

(base) [dengfei@localhost xargs]$ ls y* |xargs 
y1: y2: y3: y4: y5: y6:

坑2:
echo比ls要好, 比如:

(base) [dengfei@localhost xargs]$ echo y* |xargs 
y1 y2 y3 y4 y5 y6

显示没问题, 但是用到xargs中报错, 因为echo会打印的是字符串.

(base) [dengfei@localhost xargs]$ echo y* |xargs -i cp hello_world.txt {}
(base) [dengfei@localhost xargs]$ tree
.
├── hello_world.txt
├── y1
├── y1\ y2\ y3\ y4\ y5\ y6
├── y2
├── y3
├── y4
├── y5
└── y6

6 directories, 2 files
(base) [dengfei@localhost xargs]$ ls
hello_world.txt  y1  y1 y2 y3 y4 y5 y6  y2  y3  y4  y5  y6

4. 爬坑

使用两步法, 第一步将echo的对象, 进行分割, 一个对象一行, 使用xargs -n1

(base) [dengfei@localhost xargs]$ echo y* |xargs -n1
y1
y2
y3
y4
y5
y6

然后再用一次xargs -i即可成功.
完整命令:

echo y* |xargs -n1|xargs -i cp hello_world.txt {}

效果:

(base) [dengfei@localhost xargs]$ tree
.
├── hello_world.txt
├── y1
│   └── hello_world.txt
├── y2
│   └── hello_world.txt
├── y3
│   └── hello_world.txt
├── y4
│   └── hello_world.txt
├── y5
│   └── hello_world.txt
└── y6
    └── hello_world.txt

6 directories, 7 files

这样就消除了是用echo报错的问题. 而且逻辑更加清楚.

在这里插入图片描述

相关文章

  • Linux中xargs命令的使用方法

    1. 背景 xargs可以高效对文件批量处理: 比如你要在不同的文件夹下创建同一个文件 比如你想根据某个查询条件,...

  • Linux那点事-xargs命令详解

    Linux xargs 命令 xargs原理剖析及用法详解 1. 为什么需要xargs命令 1.1 管道|的缺陷 ...

  • xargs命令详解

    linux命令之xargs 1、xargs命令简介 xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命...

  • redis批量删除key,key包含空格,\n

    redis没有提供批量删除命令,借助linux的 xargs 命令实现批量删除 key中不带空格 如果key中带有...

  • 浅谈Linux中的xargs命令

    在说xargs命令之前,先说两句Linux中的管道(pipe)。 管道负责单向连接前一个程序的标准输出与后一个程序...

  • Linux xargs 命令

    简介 xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。 xargs 可以将管道或标准输入(s...

  • Linux:xargs命令

    有些命令只能以命令行参数的形式接受数据,无法通过stdin接受数据流,此时采用命令xargs,将标准输入数据转换成...

  • linux常用的命令笔记

    linux 查询命令:find / -type f -name "*.*" | xargs grep "关键字" ...

  • linux shell:[1] ()、(())、[]、[[]]、

    linux shell:[1] ()、(())、[]、[[]]、{}使用方法 1.() 命令组。括号中的命令将会新...

  • xargs

    xargs命令在linux系统中应用非常的广泛,也非常实用,下面链接的这篇文章对xargs讲解的也比较好,值得一看...

网友评论

    本文标题:Linux中xargs命令的使用方法

    本文链接:https://www.haomeiwen.com/subject/qkovoqtx.html