このコマンドの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に供給してコマンドファイルに渡しますか?なぜ代わり-i
に使用するのですか?その後、ELFと実行可能ファイルをgrepし、:
区切り文字を使用して最初の列を取得し、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
現在の項目に置き換え、複数の項目を積み重ねるのではなく、各入力行に対して指定されたコマンドを1回実行します。コマンドは単一項目内で呼び出されます。プロジェクトを実行し、スペースで区切られた文字列を別のプロジェクトとして扱います。xxx
xargs
たとえば、このecho
コマンドは2回実行され、xxx
必要に応じて両方の入力行の内容を置き換えます。
$ printf "foo bar\nqwerty\n" | xargs -ixxx echo ":xxx:xxx:"
:foo bar:foo bar:
:qwerty:qwerty: