我很难理解这个命令的 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
字符串替换为当前项目,并且还为每个输入行运行给定命令一次,而不是默认情况下将多个项目堆叠到单个项目中命令调用,并将空格分隔的字符串视为不同的项目。xxx
xargs
例如,这里echo
命令运行两次,并xxx
根据需要替换为两个输入行的内容:
$ printf "foo bar\nqwerty\n" | xargs -ixxx echo ":xxx:xxx:"
:foo bar:foo bar:
:qwerty:qwerty: