stdio를 리디렉션하지 않고 프로그램의 출력을 인수로 리디렉션하려면 xargs를 사용해야 합니까?
예를 들어, ls
파일 이름이 입력 스트림이 아닌 다음 명령에 대한 인수가 되기를 원합니다.
내가 말하는 내용에 대한 좋은 예가 있습니까? 이 예는 피상적이지만 출력을 ls
매개변수 로 사용하여 cat
파일의 내용을 표시 한다는 의미를 보여줍니다 .
답변1
첫 번째,하다아니요분석하다ls
. 파일 이름을 얻는 신뢰할 수 있는 방법은 많이 있지만ls
예아니요그들 중 하나.
다음은 셸의 글로빙을 사용하여 파일 이름을 생성하고 null로 구분된 파일 이름 목록을 xargs
실행하는 파일 이름 에 전달합니다 cat
.
printf '%s\0' * | xargs -0 cat
나는 이것의 목적이 파일->xargs를 보여주는 것임을 알고 있습니다. 물론 그렇지 않으면 명령줄에 들어갈 파일이 너무 많지 않는 한 위의 내용을 다음으로 바꿀 수 있습니다.
cat *
더 선택적인
ls
둘 printf '%s\0' *
다 하위 디렉터리를 포함하여 디렉터리의 전체 내용을 표시합니다. 예를 들어 일반 파일은 포함하지만 하위 디렉터리는 포함하지 않는 등 보다 선택적인 경우 CAS에서 제안한 대로 find
더 나은 도구는 다음과 같습니다.
find . -maxdepth 1 -type f -print0 | xargs -0 cat
또는:
find . -maxdepth 1 -type f -exec cat {} +
find
유용한 옵션이 많이 있습니다. man find
자세히보다.