쉘 리눅스 유닉스 xargs -i 문자열 교체

쉘 리눅스 유닉스 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에 공급하여 명령 파일에 전달합니까? 왜 -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현재 항목으로 바꾸고, 또한 여러 항목을 쌓아 두는 대신 각 입력 줄에 대해 주어진 명령을 한 번씩 실행합니다. 명령은 단일 항목 내에서 호출됩니다. 프로젝트를 수행하고 공백으로 구분된 문자열을 다른 프로젝트로 처리합니다.xxxxargs

예를 들어, 이 echo명령은 두 번 실행되어 xxx필요에 따라 두 입력 줄의 내용을 모두 바꿉니다.

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

관련 정보