파일의 줄 수를 어떻게 나열합니까 /group/book/four/word
(포함된 줄 수에 따라 정렬)?
이 ls -l
명령은 파일을 나열하지만 정렬하지는 않습니다.
답변1
다음과 같은 명령을 사용해야 합니다.
find /group/book/four/word/ -type f -exec wc -l {} + | sort -rn
find
: 원하는 경로에서 파일을 검색합니다. 재귀적이기를 원하지 않고 구현에서 이를 지원하는 경우 옵션 앞에 추가find
해야 합니다 .-maxdepth 1
-exec
exec
wc -l
: 각 파일에 대해 실행될 명령을 알려줍니다 .sort -rn
: 결과를 숫자에 따라 역순으로 정렬합니다. 큰 것부터 낮은 것까지.
(파일 이름에 개행 문자가 포함되어 있지 않다고 가정).
답변2
비재귀적
재귀가 필요하지 않은 경우 아마도 가장 간단한 버전일 것입니다.
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
sort
-n
-k2
고쳐 쓰다:가능한 제한 사항과 실제로 이를 제거하는 방법에 대해서는 Stephane을 참조하세요 tr
.
답변3
그리고 zsh
:
lines() REPLY=$(wc -l < $REPLY)
print -rC1 /group/book/four/word/*(.no+lines)
우리는 새로운 것을 정의합니다종류이 함수는 lines
파일의 줄 수를 반환합니다. 숫자 정렬을 위해 glob 결과가 정렬되는 방식을 정의하는 o+lines
glob 한정자를 사용합니다 . n
( .
일반 파일에 대해서만 검사도 추가했습니다).
.
이는 숨겨진 파일( 로 시작하는 파일)을 무시한다는 점을 제외하고는 파일 이름에 어떤 문자가 포함될 수 있는지에 대해 가정하지 않습니다. D
필요한 경우 glob 한정자를 추가하세요.
함수를 정의하는 것은 유사한 작업을 자주 수행할 때 lines
유용 하지만, 일회성인 경우 모든 작업을 한 번에 수행할 수도 있습니다.
print -rC1 /group/book/four/word/*(.noe['REPLY=$(wc -l < $REPLY)'])
다른 셸에서 다음을 실행하세요.
zsh -c '
print -rC1 /group/book/four/word/*(.noe['\''REPLY=$(wc -l < $REPLY)'\''])'
또는 정말로 이러한 셸을 사용해야 하는 경우 ksh93
/array에 저장하세요.bash
typeset -a array
eval "
array=(
$(
zsh -c '
() {
print -r -- "${(qq)@}"
} /group/book/four/word/*(N.noe['\''REPLY=$(wc -l < $REPLY)'\''])'
)
)
"
qq
(평가를 안전하게 하려면 여기에서 매개변수 확장 플래그와 함께 적절한 작은따옴표를 사용하십시오 eval
.)
답변4
설치를 원하시면fd
Rust로 작성된 매우 빠른 파일 찾기(설치해야 합니다. 어쨌든 훌륭합니다)
fd --type=file . | xargs wc -l | sort -n
기본적으로 fd
파일이 나열되고 xargs에 파일 목록이 전달됩니다 wc
(단어 수를 의미하지만 -l을 전달하면 줄 수를 계산함). 그런 다음 마지막으로 가장 작은 것부터 가장 큰 것까지 사용됩니다 sort -n
.