1. 概述

    1. 简述 xargs 的使用
  2. 背景

    1. 尝试批量操作文件

      1. 发现一些问题小问题
      2. 然后, 尝试解决
  3. 准备

    1. 环境

      1. OS

        1. centos7

1. 操作: 尝试创建多个 文本文件

  1. 概述

    1. 尝试创建多个文本文件

1. 思路1: 一个一个手动创建

  1. 这个...

    1. 这个我不说, 你们都知道...
    2. 有点费时间
  2. 示例

    1. # 真, 一个一个
    2. > touch file1
    3. > touch file2
    4. # 稍微机灵点的一个一个
    5. > touch file1 file2

2. 思路2: 循环创建

  1. 前提

    1. 熟悉 shell 的循环语法
    2. 文件名有一定的规律
  2. 示例

    1. # 简单规律
    2. > touch file{1..2}
    3. # 稍微麻烦点的
    4. > for i in {1..2};do touch file$[i*2];done

3. 思路3: 文件列表

  1. 前提

    1. 文件名可能没有那么有规律

    2. 但是有 明确的文件列表

    3. filelist

      1. file1
      2. file2
  2. 示例1

    1. > cat filelist | touch
    2. # 纳尼? 报错了...
  3. 结果: 无法运行

    1. 问题

      1. touch 为什么无法运行
    2. 解释

      1. touch 命令, 无法接受 管道输入

        1. | 是管道操作符
      2. touch 命令, 只能接受 参数
    3. 一说到参数

      1. 之前好像学过一点 xargs, 试试好使不好使
  4. 示例2

    1. > cat filelist |xargs touch
  5. 结果

    1. 没啥问题

2. xargs

  1. 概述

    1. 一个常用命令
  2. 作用

    1. 将 管道 的输入, 转为 后续命令行 的参数

      1. 难怪经常和 | 一起出现
  3. 使用

    1. 后续命令不接受管道时, 可以尝试用 xargs 试试

3. 场景2: 根据文件列表, 复制文件

  1. 概述

    1. 尝试给 多参数命令, 传递参数
  2. 场景

    1. 创建多个文件的时候, 发现 其实每个文件, 都有基本的 模板
    2. 我先建立一个模板
      1. temp
    3. 假如, 我可以按照文件列表, 把 模板 复制开来, 就能省很多事

1. 思路1: 直接复制

    1. 这个大家都会

2. 思路2: 循环复制

    1. for 循环得获取文件列表

      1. 这块我还不太熟悉, 没法讲...

3. 思路3: xargs

  1. 尝试1: 先试试一个文件

    1. copylist

      1. temp file1
    2. 命令

      1. > cat copylist | xargs cp
    3. 结果

      1. 没有问题
  2. 尝试2: 一个文件好了, 我试试多个

    1. copylist

      1. temp file1
      2. temp file2
    2. 命令

      1. > cat copylist | xargs cp
    3. 结果

      1. 报错

        1. # 什么鬼?
        2. cp: target file2 is not a directory
  3. 疑问

    1. 执行了这么多年的 cp, 没见过这种错误啊

      1. 不过 cp 多参数的时候, 好像会出这种错
      2. 可这命令到底是 怎么执行的呢?
  4. xargs -p

    1. 概述

      1. 一个 确认机制
    2. 确认机制

      1. 打印即将执行的命令
      2. 是否执行
        1. 确认输入 y
        2. 取消输入 n
    3. 命令

      1. > cat copylist | xargs -p cp
    4. 结果

      1. # 原来执行的, 是这种命令...
      2. # 这种形式的 cp, 将 前面 n-1 项 视为需要拷贝的内容, 拷贝到某个目录下面
      3. # 所以, 最后一项, 必须要是一个 目录
      4. cp temp file1 temp file2 ?...
    5. 原因

      1. xargs 从 stream 里获取的内容, 最后都 成了 一行
    6. 好了, 这下要解决另一个问题

      1. 如果能把这些内容, 每次取两个取出来, 是不是就行了

        1. 是的
  5. xargs -n

    1. 概述

      1. 截断输出, 每次传递 n 个作为 命令参数
    2. 命令

      1. # 如果想进一步确认, 可以在 2 后面加上 -p
      2. > cat copylist | xargs -n 2 cp
    3. 结果

      1. 这下好了
  6. 其实还可以这样

    1. 命令

      1. # 这样就可以不用 专门的 文件列表了...
      2. > cat filelist | xargs -n 2 cp temp
    2. 疑问

      1. 如果我的参数, 在 命令中间, 怎么办...

        1. 这个也可以解决...
  7. xargs -i

    1. 命令

      1. # 将 文件列表 里的内容, append 到 log 里
      2. # 文件名里如果有空格, 一定要用这玩意来处理
      3. # {} 代表每次 每次取出的内容
      4. > cat filelist | xargs -n 1 -i cat {} >> log

ps

  1. ref

    1. xargs 命令教程

      1. 阮老师的教程, 聊胜于无吧
    2. xargs的i参数

  2. 后续

    1. 如果遇到 多种一次各个列表, 但是每次参数不一样的

      1. 这玩意不知道怎么搞了...

Linux - shell - xargs - 基础的更多相关文章

  1. 详细介绍Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  2. Linux shell入门基础(六)

    六.Shell脚本编程详解 将上述五部分的内容,串联起来,增加对Shell的了解 01.shell脚本 shell: # #perl #python #php #jsp 不同的脚本执行不同的文本,执行 ...

  3. Linux shell入门基础(一)

    Linux shell入门基础(一): 01.增加删除用户: #useradd byf   userdel byf(主目录未删除)  userdel -r byf   该用户的属性:usermod 用 ...

  4. Linux shell脚本基础学习详细介绍(完整版)二

    详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...

  5. Linux shell脚本基础学习详细介绍(完整版)一

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  6. Linux Shell 编程基础详解——吐血整理,墙裂推荐!

    第一部分:Linux Shell 简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序, ...

  7. Linux Shell编程基础

    在学习Linux BASH Shell编程的过程中,发现由于不经常用,所以很多东西很容易忘记,所以写篇文章来记录一下 ls   显示当前路径下的文件,常用的有 -l 显示长格式  -a 显示所有包括隐 ...

  8. Linux - Shell - find - 基础

    概述 find 基础 背景 查找文件 人的记忆能力, 是有限的 计算机里的文件数量, 虽然不是无限, 但是也不少 要去找那些 记不清楚的文件, 必然要用查找 准备 OS centos7 用户 root ...

  9. Linux shell脚本 基础

    一.shell中三个引号的用法 1.单引号:所见即所得 例如:var=123 var2='${var}123' echo var2 var2结果为${var}123 2.双引号:输出引号中的内容,若存 ...

随机推荐

  1. Miller_Rabin()算法素数判定 +ollard_rho 算法进行质因数分解

    //****************************************************************// Miller_Rabin 算法进行素数测试//速度快,而且可以 ...

  2. CCS 5.5下载地址http://www.dianyuan.com/bbs/1492792.html

    http://www.dianyuan.com/bbs/1492792.html https://pan.baidu.com/s/1eQtIRK2?errno=0&errmsg=Auth%20 ...

  3. stun/turn服务器部署

    目录: 一.简介 二.安装 三.配置与运行 四.运行检测 五.答疑环节 一.简介 本文通过在服务器上安装coturn这个软件,实现搭建STUN服务器和TURN服务器. coturn 简介:是一个免费的 ...

  4. 风变编程笔记(一)-Python基础语法

    第0关  print()函数与变量 1. print()函数print()函数:告诉计算机,把括号的内容显示在屏幕上 # 不带引号 print(1+1) # 让计算机读懂括号里的内容,打印最终的结果 ...

  5. 【你不知道的javaScript 上卷 笔记1】 javaScript 是如何工作的?

    一.什么是作用域? 作用域是用来存储变量以及方便寻找变量的一套规则. 二.javaScript 编译过程(编译发生在代码执行前的几微妙) 分词/词法分析(Tokenizing/Lexing)-> ...

  6. [CF546C] Soldier and Cards - 模拟

    两个人玩牌,首先两个人都拿出自己手牌的最上面的进行拼点,两张拼点牌将都给拼点赢得人,这两张牌放入手牌的顺序是:先放对方的牌再放自己的.若最后有一个人没有手牌了,那么他就输了,求输出拼点的次数和赢得人的 ...

  7. javascript download geoserver layer as kml file

     var sqlfilter = " CITY='" + city + "' and SDATE>" + sdate + " and SDATE ...

  8. ueditor使用本地保存,自动恢复上次编辑的内容

    个人博客 地址:http://www.wenhaofan.com/article/20180912212800 ueditor默认开启了自动保存至本地的功能,但是依然需要在初始化的时候额外添加代码该功 ...

  9. .gitignore文件说明-git提交时可忽略的文件

    在我们平时做项目时,总有一些文件不想提交到服务器的版本管理上 这时就要设置相应的忽略规则,来忽略这些文件的提交 规则 作用/mtk 过滤整个文件夹*.zip 过滤所有.zip文件/mtk/do.c 过 ...

  10. 环境配置 | mac环境变量文件.bash_profile相关

    每次环境配置都费老劲,零零碎碎的知识就记在这里 文件:~/.bash_profile