파일의 입력과 함께 xargs 사용

파일의 입력과 함께 xargs 사용

다음 내용이 포함된 파일이 있다고 가정해 보겠습니다.

bob
john
sue

이제 이는 (이 경우) URL 패턴(예 http://example.com/persons/bob.tar: , john.tar, )에 직접적으로 대응됩니다 sue.tar.

나는 이 선들을 전체적으로 연결하고 싶습니다 xargs. 실행 중인 명령에 무엇이 전달되는지 알 수 없습니다. 프롬프트(예: 단순히 각 줄을 에코하고 싶다고 가정 ) 또는 bash 스크립트에서 cat file | xargs echo $PARAM매개 변수에 어떻게 액세스합니까 ?

답변1

마이클의답변맞습니다. 문제가 해결되어야 합니다. 달리기

cat file | xargs -I % curl http://example.com/persons/%.tar

bob.tar john.tar. sue.tar예상대로 파일이 다운로드됩니다.

하지만:여기서 고양이는 쓸모가 없어

대신 다음을 사용하십시오.

<file xargs -I % curl http://example.com/persons/%.tar

답변2

xargs' stdin 에서 추출한 개별 줄을 항상 끝에 붙여넣는 대신 명령 중간에 삽입하는 방법을 묻는 것 같습니다 . 그렇다면 -I플래그는 하나의 인수를 사용하며 명령에서 표준 입력에서 읽은 행으로 replacement-string대체됩니다 .xargsreplacement-string

$ cat file | xargs -I foobar curl http://example.com/foobar.tar

답변3

$ 명매개변수
...
       --arg-파일=파일
       -서류 1개
              표준 입력 대신 파일에서 항목을 읽습니다. 이것을 사용하면
              옵션을 사용하면 명령을 실행할 때 stdin이 변경되지 않습니다. 다른-
              현명하게도 stdin은 /dev/null에서 리디렉션됩니다.
...

--delimiter=/ -d를 으로 설정할 수도 있습니다 '\n'.


반면에 파일의 각 줄을 URL로 변환하려고 하면

$sed-e 's#.*#http://example.com/persons/&.tar#' 파일

그게 전부입니다. 모든 항목을 가져오려면 파이프로 .| wget -i

답변4

GNU Parallel을 사용하면 다음을 수행할 수 있습니다.

cat urls | parallel curl {} ">" {/}

또는:

cat persons | parallel curl http://example.com/persons/{}.tar ">" {}.tar

자세히 알아보려면 GNU Parallel 소개 비디오를 시청하세요. http://www.youtube.com/watch?v=OpaiGYxkSuQ

관련 정보