이 명령의 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
현재 항목으로 바꾸고, 또한 여러 항목을 쌓아 두는 대신 각 입력 줄에 대해 주어진 명령을 한 번씩 실행합니다. 명령은 단일 항목 내에서 호출됩니다. 프로젝트를 수행하고 공백으로 구분된 문자열을 다른 프로젝트로 처리합니다.xxx
xargs
예를 들어, 이 echo
명령은 두 번 실행되어 xxx
필요에 따라 두 입력 줄의 내용을 모두 바꿉니다.
$ printf "foo bar\nqwerty\n" | xargs -ixxx echo ":xxx:xxx:"
:foo bar:foo bar:
:qwerty:qwerty: