wc 해석 기준을 파일 목록으로 만드는 방법

wc 해석 기준을 파일 목록으로 만드는 방법

wc이 문제를 해결하는 다른 방법이 있다는 것을 알고 있지만 stdin을 파일 이름이나 파일 이름 목록으로 해석할 수 있기를 원합니다 . 예를 들어,

ls JP*/std* | wc

같은 효과가 있을 것이다

wc JP*/std*

이 동작을 조정하는 것은 불가능할 것 같지만 내 삶을 더 쉽게 만들어 줄 스크립트를 작성하고 있습니다. 감사해요.

답변1

find와 함께 사용됩니다 xargs. 내가 이것을 권장하는 유일한 이유 는 파일 이름을 NUL로 구분하는 옵션 find을 활용하는 것입니다 -print0. 이는 공백이 포함된 파일 이름과 관련된 문제를 방지하는 데 도움이 됩니다.

find .  -maxdepth 1 -type f -print0 | xargs -0 wc

답변2

명령의 출력을 가져와 입력 파일 목록으로 사용하려면 wc다음을 수행할 수 있습니다.

wc $(ls JP*/std*)

실행 ls JP*/std*되고 출력이 에 인수로 전달됩니다 wc.

xargs다음은 귀하에게도 유용할 수 있습니다.

ls JP*/std* | xargs wc

보다xargs맨페이지매우 유연하므로 사용 방법에 대한 자세한 내용을 확인하세요.

답변3

귀하의 의견을 읽은 후

입력은 파일에서 올 수 있습니다.

파일 목록이 이미 파일에 존재하는 경우 찾기 부분을 건너뛰고 해당 xargs부분만 사용할 수 있습니다.

xargs매뉴얼 페이지를 참조하십시오 .

-a읽어야 할 목록이 있는 곳에 옵션을 사용하여 파일의 파일 이름을 전달합니다 xargs.xargs

목록의 파일 이름이 전체 파일 이름이 아니고 wc파일을 편집할 수 있는 디렉터리가 없어 전달하는 것만으로는 충분하지 않은 경우 전체 경로를 포함하십시오(수동으로 편집하지 않고도 이를 수행할 수 있어야 함). sed또는 awk유사).

xargs-I또는 (옵션 입력)에서 문자열 바꾸기 메커니즘을 사용할 수 있습니다 . xargs(마지막 방법을 사용하는 경우 -I각 줄마다 다른 프로그램이 호출되며 최대 길이에 일부 제한이 있습니다. 자세한 내용은 매뉴얼 페이지를 참조하세요.)

입력이 파일에서 오는 경우(따라서 옵션에서 제공하는 메커니즘을 사용할 수 없음 -0) xargs파일 이름에 공백이나 기타 이상한 문자가 있는지 매우 주의해야 합니다. 오히려 의도하지 않은 결과를 피할 수 있는 방법을 찾아야 합니다.

예를 들어 "my document.txt"라는 파일이 있고 목록에 다음과 같이 적는 경우

my document.txt

그런 다음 파일에 기록된 것처럼 전달되며, 이것이 수행하는 작업은 다음과 같습니다.

wc my document.txt

이렇게 하면 wc프로그램이 두 개의 파일을 찾게 됩니다. 하나는 my이고 다른 하나는 document.txt입니다.

다음과 같은 내용을 전달해야 합니다.

wc "my document.txt"

또는

wc my\ document.txt

(이미 교체 메커니즘을 사용하고 있는 경우 첫 번째 방법이 더 쉬울 수 있으며, 이미 파일을 편집하고 있는 경우 두 번째 방법이 더 쉬울 수 있습니다.)

-0글쎄, 가능하다면 각 항목이 널 문자 로 구분되도록 입력 파일을 편집하고 xargs.

관련 정보