我们无法再 -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 ?