이 명령을 사용하여 찾은 각 파일에 몇 줄이 있는지 확인하고 싶습니다 find
.
나는 이것을 사용하여 wc -l
단일 파일의 줄 번호를 찾을 수 있다는 것을 알고 있습니다. 그러나 다음 출력에서 파이핑할 때는 작동하지 않습니다 find
.
find -type f -name package.json | wc -l
그러면 발견된 파일 수가 반환됩니다. 발견된 각 파일의 줄 수를 반환하고 싶습니다.
답변1
wc
w
바이트/문자/명령/줄 개수가 있는 c
파일 목록을 가져옵니다.논쟁.
인수 없이 호출되면 표준 입력에 이러한 바이트/문자/단어/줄을 보고합니다. 따라서 로 파이프하면 find
의 wc -l
출력에서 개행 수를 얻게 되므로 find
이는 발견된 파일 수에 해당 경로의 개행 수를 더한 값이 됩니다.
GNU 구현에서는 wc
이 옵션을 사용하여 file 에서 NUL로 구분된 파일 목록을 가져올 수도 있습니다 --files0-from
. 이는 -
stdin이라는 파일 대신 stdin을 의미하는 것으로 간주되므로 -
다음을 수행할 수 있습니다.
find . -name package.json -type f -print0 |
wc -l --files0-from=-
표준 find
이나 구현을 사용하여 파일 경로 목록을 전달할 wc
수 있습니다.find
매개변수로그리고 wc
:
find . -name package.json -type f -exec wc -l {} +
그러나 일치하는 파일이 많으면 wc
여러 번 실행하게 되어 행이 여러 번 나타날 수 있습니다 total
.
wc
total
이 줄은 처리할 파일이 2개 이상 제공되면 인쇄되므로 이 total
줄을 건너뛰려면 다음을 수행할 수 있습니다.
find . -name package.json -type f -exec wc -l {} ';'
프로세스를 분기하고 각 파일에 대해 명령을 실행하는 데 비용이 많이 들기 때문에 이는 매우 비효율적입니다.
이것이 정말로 관심이 있는 합계라면 다음과 같이 하십시오.
find . -name package.json -type f -exec cat {} + | wc -l
우리는 cat
이러한 파일의 내용에 대한 링크를 에 제공합니다 wc
.
zsh
및 any 를 사용하면 wc
다음을 수행할 수 있습니다.
wc -l -- **/package.json(D.)
( otglob의 경우 dos처럼 숨길 D
수도 있고 다음 내용만 포함할 수도 있습니다.D
find
.
정기적인해당 파일 -type f
).
이는 정렬된 목록을 제공하고 접두어를 피할 수 있다는 장점이 있습니다 ./
.
이번에는 일치하는 파일이 없거나 너무 많으면 오류가 발생합니다.
GNU를 사용하면 du
NUL로 구분된 glob 확장을 다음과 같이 전달하여 이러한 문제를 피할 수 있습니다 wc -l --files0-from=-
.
print -rNC1 -- **/package.json(ND.) | wc -l --files0-from=-
또한 json 형식에서는 개행(중요 wc -l
)이 중요하지 않으므로 이것이 유용한 측정항목인지 확실하지 않습니다.
예를 들어 다음 파일의 일부 배열에 있는 요소 수를 대신 반환할 수 있습니다.
find . -name package.json -type f -exec \
jq -r '[.devDependencies|length,input_filename]|@csv' {} +
(파일 경로가 UTF-8로 인코딩된 텍스트라고 가정하면 결과는 여기에 CSV 형식으로 제공됩니다.)
답변2
xargs
다음을 사용하여 표준 입력을 필수 인수 벡터로 파이프 할 수 있습니다 .
find -type f -name package.json | xargs wc -l
또는 단순히 쉘 명령 대체를 통해 이를 채우도록 하십시오.
wc -l $(find -type f -name package.json)