Linux常用基本命令(xargs )

xargs:能够将管道或者标准输入传递的数据转换成xargs命令后面跟随的参数

ghostwu@dev:~/linux/cp$ ls
ghostwu_hardlink  ghostwu_home  ghostwu_softlink  ghostwu.txt
ghostwu@dev:~/linux/cp$ cat ghostwu.txt 
1 2 3
4 5 6 7
8 9 10
ghostwu@dev:~/linux/cp$ xargs < ghostwu.txt 
1 2 3 4 5 6 7 8 9 10

把ghostwu.txt文件的内容 通过输入重定向 传递给xargs,相当于echo 1 2 3 4 5 6 7 8 9 10

-n: 指定一行显示几个

ghostwu@dev:~/linux/cp$ xargs -n 2 < ghostwu.txt 
1 2
3 4
5 6
7 8
9 10

-d:指定分隔符

ghostwu@dev:~/linux/cp$ echo a-b-c-d
a-b-c-d
ghostwu@dev:~/linux/cp$ echo a-b-c-d | xargs -d -
a b c d

-i: 以{}替代前面的结果,经常跟find命令结合使用

把家目录下.py结尾的文件 复制 到tmp目录下

ghostwu@dev:~$ ls
Desktop    examples.desktop  linux  Pictures  python     tmp
Documents  git_test          Music  project   software   Videos
Downloads  info              php    Public    Templates
ghostwu@dev:~$ ls tmp
ghostwu@dev:~$ find . -name "*.py" | xargs -i cp -a {} tmp/
ghostwu@dev:~$ ls tmp
for.py    func3.py  func5.py  global2.py  while1.py
func2.py  func4.py  func.py   global.py   while.py

删除tmp下以.py结尾的文件

ghostwu@dev:~$ ls tmp
for.py    func3.py  func5.py  global2.py  while1.py
func2.py  func4.py  func.py   global.py   while.py
ghostwu@dev:~$ touch tmp/{a..f}.txt
ghostwu@dev:~$ ls tmp
a.txt  c.txt  e.txt   f.txt     func3.py  func5.py  global2.py  while1.py
b.txt  d.txt  for.py  func2.py  func4.py  func.py   global.py   while.py
ghostwu@dev:~$ find ./tmp -name "*.py" | xargs -i rm -rf {}
ghostwu@dev:~$ ls tmp
a.txt  b.txt  c.txt  d.txt  e.txt  f.txt

创建带空格的文件

ghostwu@dev:~/tmp$ touch "hello ghostwu.txt"
ghostwu@dev:~/tmp$ ls
a.txt  b.txt  c.txt  d.txt  e.txt  f.txt  hello ghostwu.txt
ghostwu@dev:~/tmp$ touch hi/ ghostwu.txt
ghostwu@dev:~/tmp$ ls
a.txt  b.txt  c.txt  d.txt  e.txt  f.txt  hello ghostwu.txt  hi ghostwu.txt
ghostwu@dev:~/tmp$ rm hello/ ghostwu.txt 
ghostwu@dev:~/tmp$ ls
a.txt  b.txt  c.txt  d.txt  e.txt  f.txt  hi ghostwu.txt
ghostwu@dev:~/tmp$ rm hi/ ghostwu.txt 
ghostwu@dev:~/tmp$ ls
a.txt  b.txt  c.txt  d.txt  e.txt  f.txt

不能删除带有空格的文件

ghostwu@dev:~/tmp$ ls
alltxt.tar.gz  b.txt  d.txt  f.txt              hi ghostwu.txt
a.txt          c.txt  e.txt  hello ghostwu.txt
ghostwu@dev:~/tmp$ find . -name "*.txt" | xargs rm
rm: cannot remove './hello': No such file or directory
rm: cannot remove 'ghostwu.txt': No such file or directory
rm: cannot remove './hi': No such file or directory
rm: cannot remove 'ghostwu.txt': No such file or directory
ghostwu@dev:~/tmp$ ls
alltxt.tar.gz  hello ghostwu.txt  hi ghostwu.txt

用man手册查找find 中 -print0选项

-print0
True; print the full file name on the standard output, followed
by a null character (instead of the newline character that
-print uses). This allows file names that contain newlines or
other types of white space to be correctly interpreted by pro‐
grams that process the find output. This option corresponds to
the -0 option of xargs.

意思大概就是 find 命令的-print0选项启用之后,会把文件名中包含换行或者其他空白字符正确的解释出来。这个选项通常跟 xargs 的 -0选项结合使用

所以,可以向下面这种方式,执行xargs 

ghostwu@dev:~/tmp$ ls
alltxt.tar.gz  b.txt  d.txt  f.txt              hi ghostwu.txt
a.txt          c.txt  e.txt  hello ghostwu.txt
ghostwu@dev:~/tmp$ find . -name "*.txt" -print0 | xargs -0 rm
ghostwu@dev:~/tmp$ ls
alltxt.tar.gz

查找家目录下面所有的.py文件,然后打包

ghostwu@dev:~/tmp$ ls
ghostwu@dev:~/tmp$ find ~ -name "*.py" | xargs tar cvf allpy.tar.gz
tar: Removing leading `/' from member names
/home/ghostwu/python/func2.py
/home/ghostwu/python/func3.py
/home/ghostwu/python/func4.py
/home/ghostwu/python/func.py
/home/ghostwu/python/global.py
/home/ghostwu/python/global2.py
/home/ghostwu/python/while.py
/home/ghostwu/python/for.py
/home/ghostwu/python/func5.py
/home/ghostwu/python/while1.py
ghostwu@dev:~/tmp$ ls
allpy.tar.gz
ghostwu@dev:~/tmp$ tar -tvf allpy.tar.gz 
-rw-rw-r-- ghostwu/ghostwu 179 2018-03-18 21:29 home/ghostwu/python/func2.py
-rw-rw-r-- ghostwu/ghostwu  58 2018-03-18 21:31 home/ghostwu/python/func3.py
-rw-rw-r-- ghostwu/ghostwu  81 2018-03-18 21:33 home/ghostwu/python/func4.py
-rw-rw-r-- ghostwu/ghostwu  44 2018-03-18 21:26 home/ghostwu/python/func.py
-rw-rw-r-- ghostwu/ghostwu 150 2018-03-18 21:53 home/ghostwu/python/global.py
-rw-rw-r-- ghostwu/ghostwu 124 2018-03-18 21:55 home/ghostwu/python/global2.py
-rw-rw-r-- ghostwu/ghostwu  90 2018-03-18 21:19 home/ghostwu/python/while.py
-rw-rw-r-- ghostwu/ghostwu  82 2018-03-18 21:08 home/ghostwu/python/for.py
-rw-rw-r-- ghostwu/ghostwu  99 2018-03-18 21:48 home/ghostwu/python/func5.py
-rw-rw-r-- ghostwu/ghostwu  92 2018-03-18 21:23 home/ghostwu/python/while1.py

 

Hadoop编译源码

1.1 前期准备工作 1)CentOS联网 配置CentOS能连接外网。最好是用新克隆的虚拟机 注意:采用root角色编译,减少文件夹权限出现问题 2)jar包准备(hadoo...

简单的Linux命令笔记

ls -l 详细信息ls /dev/ -ls 很详细ls -a 显示隐藏ls -lh 方便看ls -lh –sort=size 按大小排序.开头的都是隐藏 cd /media/ 进入cd .. 上一级pwd 当前工...

Linux常用基本命令[find]用法(1)

find是个很强大的命令,用法很多。 作用:查找目录下的文件,同时也可以调用其他命令执行相应的操作 用法: find [选项] [路径][操作语句] find [-H] [-L] [-...

linux系统开机流程详解

今天,我们主要来谈谈计算机系统的启动流程,在此借用网络上的一张图来说明整个流程: 1、BIOS启动 BIOS是写入到主板上的一个韧体(韧体就是写入到硬件上的...

makefile中的一些参数说明

#obj = main.o sub.o add.o div.o mul.osrc = $(wildcard *.c) #搜索.c文件 可以加路径 obj = $(patsubst %.c, %.o, $(src))#字符匹配替换,将src中所有.c...

Linux下设置共享目录

Linux系统的文件或目录的共享功能是非常强大,而且是非常灵活的,其对权限的控制可以做到非常的细致,当然如果你是通过命令行方式进行设置的 话,那么对...