shell linux unix xargs -i 替换字符串

shell linux unix xargs -i 替换字符串

我很难理解这个命令的 xargs 部分:

find -type f | sed 's/ /\\ /g' | xargs -ifil file fil | \
   grep ELF | grep executable | cut -d: -f1 | xargs -ifil find fil -exec chmod 744 {} \;

我的理解是:查找文件而不是目录,然后将“”替换为“\”,然后将输出提供给 xargs,将其传递给命令文件?为什么要用the-i​​来代替呢?然后 grep ELF 和可执行文件,使用:delimeter 获取第一列,再次使用与 chmod 744 相同的选项执行 xargs ?

答案1

嗯,是 的一个(已弃用的)替代品,GNU 手册页说明了它的作用:-istr-I str-I

-I replace-str
      Replace  occurrences  of  replace-str  in the initial-arguments with 
      names read from standard input.  Also, unquoted blanks do not termi‐
      nate  input  items;  instead the separator is the newline character. 
      Implies -x and -L 1.

换句话说,使用-ixxx(或-Ixxx),在运行命令之前将给定命令中的xargs字符串替换为当前项目,并且还为每个输入行运行给定命令一次,而不是默认情况下将多个项目堆叠到单个项目中命令调用,并将空格分隔的字符串视为不同的项目。xxxxargs

例如,这里echo命令运行两次,并xxx根据需要替换为两个输入行的内容:

$ printf "foo bar\nqwerty\n" | xargs -ixxx echo ":xxx:xxx:"
:foo bar:foo bar:
:qwerty:qwerty:

相关内容