Linux xargs命令,-print0,xargs -0的应用

xargs是一个过滤器,可以给命令传递参数;也是组合多个命令的一个工具,它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。

通常情况下,xargs从管道或者stdin中读取数据,然而它也能够从文件的输出中读取数据。

xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。

xargs是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,下面是一些如何有效使用xargs 的实用例子。

EXAMPLES

find /tmp -name core -type f -print | xargs /bin/rm -f

Find files named core in or below the directory /tmp and delete them.  Note that this will work incorrectly if there are any filenames containing newlines or spaces.

find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f

Find  files  named core in or below the directory /tmp and delete them, processing filenames in such a way that file or directory names containing spaces or newlines are correctly handled.

find /tmp -depth -name core -type f -delete

Find files named core in or below the directory /tmp and delete them, but more efficiently than in the previous example (because we avoid the need to use fork(2) and exec(2) to launch rm and we don‘t need the extra xargs process).

cut -d: -f1 < /etc/passwd | sort | xargs echo

Generates a compact listing of all the users on the system.

xargs sh -c ‘emacs "[email protected]" < /dev/tty‘ emacs

Launches the minimum number of copies of Emacs needed, one after the other, to edit the files listed on xargs‘ standard input.  This example achieves the same effect as BSD‘s -o option, but in a more flexible and portable way.

find /etc -name "*.conf" | xargs ls –l

Find all files ending with *.conf in or below the directory /etc.

cat url-list.txt | xargs wget –c

If you have a file that contains a lot of URLs what you want to download, you can download all links using xargs

find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz

Find all of the JPG files, and compress it

ls *.sh | xargs -n1 -i cp {} /external-hard-drive/directory

Copy all the shell files to an external hard drive

find . -name "*.log" -print0 | xargs -0 sed -i ‘s/aaa/bbb/g‘

Find all files ending with *.log and to find the documents inside the contents of all the AAA characters are replaced by BBB

find -name "*.log" -mtime +10 -print0 |xargs -0 rm -rfv

以可视化的方式删除以log结尾的10天前的文件,包括带空格的文件:

find . -name ‘*.txt‘ -type f -print0 |xargs -0 grep -n ‘aaa‘

将*.txt 的文件中包含aaa的行显示出来,并在前面列出行号,如果有多个文件,也会在前面有所显示。

[[email protected] tmp]# find . -name ‘*.txt‘ -type f -print0 |xargs -0 grep -n ‘aaa‘

./2.txt:1:aadddaaaaaddddddddaaaaaaa

./1.txt:1:aaaaaaaddddddddaaaaaaa

find中的-print0和xargs中-0的内涵

默认情况下, find 每输出一个文件名, 后面都会接着输出一个换行符 (‘\n‘), 因此我们看到的 find 的输出都是一行一行的:

[[email protected] tmp]# ll

total 0

-rw-r--r-- 1 root root 0 Jul 31 13:28 1.log

-rw-r--r-- 1 root root 0 Jul 31 13:28 2.log

-rw-r--r-- 1 root root 0 Jul 31 13:28 3.log

把所有的 .log 文件删掉, 可以配合 xargs 一起用:

find -name ‘*.log‘ | xargs rm

[[email protected] tmp]# ls -l

total 0

-rw-r--r-- 1 root root 0 Jul 31 15:53 a 1.log

-rw-r--r-- 1 root root 0 Jul 31 15:53 a 2.log

-rw-r--r-- 1 root root 0 Jul 31 15:53 a 3.log

[[email protected] tmp]# find -name ‘*.log‘ | xargs rm

rm: cannot remove `./a‘: No such file or directory

rm: cannot remove `1.log‘: No such file or directory

rm: cannot remove `./a‘: No such file or directory

rm: cannot remove `2.log‘: No such file or directory

rm: cannot remove `./a‘: No such file or directory

rm: cannot remove `3.log‘: No such file or directory

原因其实很简单, xargs 默认是以空白字符 (空格, TAB, 换行符) 来分割记录的, 因此文件名 ./a 1.log 被解释成了两个记录 ./a 和 1.log, 不幸的是 rm 找不到这两个文件.

解决此类问题的方法:

find 在打印出一个文件名之后接着输出一个 NULL 字符 (‘\0‘) 而不是换行符, 然后再告诉 xargs 也用 NULL 字符来作为记录的分隔符.

这就是 find 的 -print0 和 xargs 的 -0 的内涵。

一般的编程语言中都用 ‘\0‘ 来作为字符串的结束标志, 文件的路径名中不可能包含 ‘\0‘ 字符.选 ‘\0‘ 而不是其他字符做分隔符大概也是因此而来。

Linux xargs命令,-print0,xargs -0的应用,布布扣,bubuko.com

时间: 2024-11-04 23:20:12

Linux xargs命令,-print0,xargs -0的应用的相关文章

linux find命令-print0和xargs中-0使用技巧(转载)

本文介绍了linux find命令中-print0和xargs中-0用法技巧,一些find命令的使用经验,需要的朋友参考下. 本节内容:linux find命令中-print0和xargs中-0的用法. 默认情况下, find命令每输出一个文件名, 后面都会接着输出一个换行符 ('n'), 因此find 的输出都是一行一行的: [bash-4.1.5] ls -ltotal 0-rw-r--r-- 1 root root 0 2010-08-02 18:09 file1.log-rw-r--r-

linux基础命令:xargs

linux下xargs命令详解 xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据.xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代. 例子一 1. 当你尝试用rm 删除太多的文件,你可能得到一个错误信息:/bin/rm Argument

【Linux常见命令】xargs命令

xargs - build and execute command lines from standard input. 从标准输入< 方向获取数据,再创建和执行命令 xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具. xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据. xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行. xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输

【转】【Linux】linux下xargs命令

xargs命令当前位置:首页 ? 软件·打印·开发·工具 ? xargs xargs命令常用工具命令 xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具.它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数.xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行.xargs的默认命令是echo,空格是默认定界符.这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换

Linux xargs命令

之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据.xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代. xargs 是一个强

Linux常用命令(二)

1.wget命令网络应用 wget命令用来从指定的URL下载文件.wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕.如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载.这对从那些限定了链接时间的服务器上下载大文件非常有用. 语法 wget(选项)(参数) 选项 -a<日志文件>:在指定的日志文件中记录资料的执行过程: -A<后缀名>:指定要下载文件的后缀名,多个后缀名之间使用

[zz]linux find命令中-print0和xargs中-0的用法

  默认情况下, find命令每输出一个文件名, 后面都会接着输出一个换行符 ('n'), 因此find 的输出都是一行一行的: [bash-4.1.5] ls -ltotal 0-rw-r--r-- 1 root root 0 2010-08-02 18:09 file1.log-rw-r--r-- 1 root root 0 2010-08-02 18:09 file2.log[bash-4.1.5] find -name '*.log'./file2.log./file1.log 比如用f

linux下xargs命令用法详解 【转】

xargs在linux中是个很有用的命令,它经常和其他命令组合起来使用,非常的灵活.xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.由此 这个命令也是后置引用的一个强有力的替换.在一般使用过多参数的命令替换失败的时候,用xargs来替换它一般都能成功.通常情况下,xargs从管道或 者stdin中读取数据,但是它也能够从文件的输出中读取数据.xargs的默认命令是echo.这意味着通过管道传递给xargs的输入将

如何在Linux里使用xargs命令

你是否遇到过这样的情况,需要一遍又一遍地对多个文件执行同样的操作?如果有过,那你肯定会深有感触这是多么的无聊和效率低下.还好有种简单的方 式,可以在基于Unix的操作系统中使用xargs命令解决这个烦恼.通过这个命令你可以有效地处理多个文件,节省你的时间和精力.在这篇教程中,你可以 学到如何一次性对多个文件执行命令或脚本操作,再也不用担心像单独处理无数个日志或数据文件那样吓人的任务了. xargs命令有两个要点.第一,你必须列出目标文件.第二,你必须指定对每个文件需要执行的命令或脚本. 这篇教程