Linux基础教程:find 与 xargs(4)

    我们无法再 -exec 选项后直接使用多个命令。它只能接受单个命令,不过我们可以耍一个小花招。把多个命令写到一个shell脚本中,然后在 -exec 中使用这个脚本。

 

组合多个条件进行搜索

     我们可以同时指定多个 选项, 比如: find . -type f  -size 1M  ; 我们同时指定了 -type , -size 选项。默认情况下,如果我们同时指定了多个选项, 那么选项之间默认是通过 “” 条件组合。 

( expr )

              Force precedence.  Since parentheses are special to the shell, you will  nor-

              mally need to quote them.  Many of the examples in this manual page use back-

              slashes for this purpose: '\(...\)' instead of '(...)'.

expr1 expr2

              Two  expressions in a row are taken to be joined with an implied "and"; expr2

              is not evaluated if expr1 is false.

find 支持三种逻辑组合方式:

-a        -and

-o        -or

!           -not

find命令的好基友 xargs

    有些命令只能以命令行参数的形式接受数据,而无法通过stdin接受数据流。这种情况下,我们没法用管道来提供哪些只有通过命令行参数才能提供的数据。

    xargs是一个很有用的命令,它擅长将标准输入数据转换成命令行参数。xargs能够处理stdin并将其转换为特定命令的命令行参数。

    xargs命令应该紧跟在管道操作符之后。它以标准输入作为主要的源数据流,并使用stdin并通过提供命令行参数来执行其他命令。xargs命令把从stdin接收到的数据重新格式化(xargs 默认是以空白字符 (空格, TAB, 换行符) 来分割记录),再将其作为参数提供给其他命令。 

例如: command  |  xargs

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

 

-d 选项: 指定参数的分隔符

# echo "splitXsplitXsplitXsplit" | xargs -d X

split split split split

  

-n 选项: 指定每行最大的参数数量 n, 我们可以将任何来自 stdin 的文本划分成多行,

每行 n 个参数。每一个参数都是由“”(空格)隔开的字符串。空格是默认的定界符。

# echo "splitXsplitXsplitXsplit" | xargs -d X -n 2

split split

split split

  

-I 选项, 可以指定一个替换字符串,这个字符串在xargs扩展时会被替换掉。

当 -I 与 xargs 结合使用时,对于每一个参数,命令都会被执行一次。

相当于指定一个占位符。

# cat args.txt | xargs -I {} ./cecho.sh -p {} -l

  

-I 指定了替换字符串。对于每一个命令参数,字符串{}会被从 stdin 读取到的参数所替换。

 

为什么要使用 xargs ?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/16545.html