답변:
다음과 같은 명령을 사용해야합니다.
find /group/book/four/word/ -type f -exec wc -l {} + | sort -rn
find
: 원하는 경로에서 파일을 검색하십시오. 재귀를 원하지 않고 find
구현에서 지원하는 -maxdepth 1
경우 -exec
옵션 바로 앞에 추가해야합니다 .exec
: wc -l
모든 파일 에서 실행되도록 명령에 지시 합니다.sort -rn
: 결과를 역순으로 정렬합니다. 더 큰에서 더 낮은로.(파일 이름에 줄 바꿈 문자가 포함되어 있지 않다고 가정).
wc
한 total
줄 도 인쇄 되므로 하나의 파일이 없으면 하나 이상의 "총"줄이 표시됩니다. . 파이프를 grep /
제거하여 제거 할 수 있습니다.
sort
명령으로 공감
재귀가 필요없는 경우 아마도 가장 간단한 버전입니다.
wc -l /group/book/four/word/*|sort -n
wc
카운트 라인 (옵션 -l
마다의) (하지만 숨겨진) ( *
)에서 파일 /group/book/four/word/
및 sort
(파이프를 통해 결과를 정렬 |
) 수치 (옵션 -n
).
누군가이 답변에 대해 언급 grep -rlc
하기 전에을 언급 하기 전에 의견을 남겼 습니다. 실제로 grep
재귀가 필요한 경우 특히 훌륭한 대안입니다.
grep -rc '^' /group/book/four/word/|tr ':' ' '|sort -n -k2
(옵션을 계산합니다 -c
재귀 (옵션) -r
) 라인 매칭 ( grep
) '^'
디렉토리에 (라인의 시작입니다) /group/book/four/word/
. 그런 다음 콜론을 공백으로 대체해야합니다 (예 :을 사용 tr
하여 help ). 두 번째 열 (옵션 ) 에서 sort
숫자로 정렬하려면 -n
(옵션 -k2
)
업데이트 : 가능한 제한 사항과 실제로 제거하는 방법에 대한 Stephane의 의견을 참조하십시오 tr
.
grep -c .
유효한 문자가 하나 이상 포함 된 행을 계산합니다. grep -c '^'
모든 줄을 세는 데 사용하십시오 (일부 grep
구현 에서는 마지막 개행 뒤의 후행 문자도 계산 합니다). 모든 grep
구현이 a를 지원하는 것은 아니며 -r
동작 은 구현에 따라 다릅니다. :
s (세미콜론이 아닌 콜론)를 공백 으로 변환 할 필요는 없습니다 sort
. 그냥 사용하십시오 -t:
. 파일 이름에 :
공백이나 줄 바꿈 문자가 포함되어 있지 않다고 가정합니다 .
wc
여러 경로를 통과하면 편리한 총액을 모두 알 수 없었습니다 . 와일드 카드 및 파이프와의 기능 연결 sort
은 정말 깨끗합니다.
로 zsh
:
lines() REPLY=$(wc -l < $REPLY)
printf '%s\n' /group/book/four/word/*(.no+lines)
파일의 줄 수에 응답 하는 새로운 정렬 함수 lines
를 정의 합니다. 그리고 우리 o+lines
는 n
(숫자 정렬 과 함께 ) glob 결과가 정렬되는 방법을 정의하는 glob 한정자를 사용합니다 . ( .
정규 파일 만 확인하기 위해 추가됨).
따라서 파일 이름에 숨겨진 파일 이외의 문자 (로 시작하는 문자)가 포함될 수 있다는 가정은 없습니다 .
. D
원하는 경우 glob 한정자를 추가하십시오 .
bash
만 ...
의 하위 디렉토리에 파일을 원하는지 여부를 지정하지 않습니다 /group/book/four/word
. find
jherran의 대답에 솔루션은 서브 디렉토리로 내려합니다. 원하지 않으면 대신 쉘을 사용하십시오.
for file in ./*; do [ -f "$file" ] && wc -l "$file"; done | sort -n
파일 이름에 줄 바꿈이 포함될 수 있으면 다음과 같이 사용할 수 있습니다.
for file in ./*; do
[ -f "$file" ] &&
printf "%lu %s\0" "$(wc -l < "$file")" "$file"
done | sort -zn | tr '\0' '\n'
당신이 경우 마지막으로 할 하위 디렉토리로 하강 할을, 당신은이를 사용할 수 있습니다 bash
4 위 :
shopt -s globstar
for file in ./**/*; do [ -f "$file" ] && wc -l "$file"; done | sort -n
참고 버전의 것을 bash
반복적으로 (같은 디렉토리 트리를 내려 할 때 이전 4.3은 심볼릭 링크를 따라했다 zsh
's 또는 tcsh
의 ***/*
).
또한 위의 모든 솔루션은 숨겨진 파일 (이름이 a로 시작하고 포함하는 데 .
사용 shopt -s dotglob
되는 파일)을 무시 하고 심볼릭 링크의 줄 수 ( find
접근 방식이 아닌)도 포함합니다.
-xtype f
GNU 찾기 또는 *(-.)
zsh)에 대한 심볼릭 링크를 고려 하고 숨겨진 파일을 생략한다는 것입니다.
%lu
에 printf
? 내가 기억 하듯이, 그것은 부호없는 긴 십진수를 의미합니다. 정말 필요합니까? 왜 숫자를 문자열로 취급하지 않습니까? 차이가 있습니까?
0
빈 문자열 대신 확장되어 약간 더 좋습니다. 일부 정렬 구현은 부호없는 정수로 작동하며 일부는 부호있는 정수로 작동합니다. %lu
가장 안전한 내기처럼 들리지만 2^31
라인 이있는 것처럼 중요하지 않을 수도 있습니다.
ls -l
줄 수를 제공하지 않습니다.ls -lS
일부ls
구현 ( 크기 는 내용의 바이트 수)으로 파일을 크기별로 정렬합니다 .