Linux 디렉토리에서 파일을 재귀 적으로 계산하는 방법은 무엇입니까?
나는 이것을 찾았다:
find DIR_NAME -type f ¦ wc -l
그러나 이것을 실행하면 다음 오류가 반환됩니다.
찾기 : 경로는 식 앞에 와야합니다. ¦
답변
이것은 작동해야합니다 :
find DIR_NAME -type f | wc -l
설명:
-type f
파일 만 포함합니다.|
( 및 아님¦
)find
명령의 표준 출력을wc
명령의 표준 입력으로 합니다.wc
(단어 수의 줄임말) 입력에서 개행, 단어 및 바이트 수를 계산합니다 ( 문서 ).-l
줄 바꿈 만 계산합니다.
노트:
- 교체
DIR_NAME
로.
현재 폴더에서 명령을 실행합니다. - 당신은 또한 제거 할 수 있습니다
-type f
카운트에 디렉토리 (및 심볼릭 링크)를 포함 위해를 . - 파일 이름에 줄 바꿈 문자가 포함될 수있는 경우이 명령이 초과 될 수 있습니다.
예제가 작동하지 않는 이유에 대한 설명 :
표시 한 명령에서 “파이프”( |
)를 사용하여 두 명령을 연결 ¦
하지 않고 쉘이 명령 또는 이와 유사한 것으로 인식하지 못하는 깨진 막대 ( )를 사용합니다. 그 때문에 오류 메시지가 나타납니다.
답변
현재 디렉토리의 경우 :
find -type f | wc -l
답변
현재 디렉토리 아래의 각 디렉토리에있는 파일 수를 분석하려면 다음을 수행하십시오.
for i in */ .*/ ; do
echo -n $i": " ;
(find "$i" -type f | wc -l) ;
done
물론 한 줄로 갈 수 있습니다. 괄호 wc -l
는 ( find $i -type f
이 경우) 출력 을보고 있어야하는 것을 명확 하게합니다 .
답변
당신이 사용할 수있는
$ tree
트리 패키지를 설치 한 후
$ sudo apt-get install tree
(데비안 / 민트 / 우분투 리눅스 머신에서).
이 명령은 파일 수뿐만 아니라 디렉토리 수도 별도로 표시합니다. -L 옵션을 사용하여 최대 표시 레벨 (기본적으로 디렉토리 트리의 최대 깊이)을 지정할 수 있습니다.
-a
옵션 을 제공하여 숨겨진 파일도 포함 할 수 있습니다 .
답변
내 컴퓨터 에서 허용되는 답변 rsync
보다 약간 빠릅니다 find | wc -l
.
$ rsync --stats --dry-run -ax /path/to/dir /tmp
Number of files: 173076
Number of files transferred: 150481
Total file size: 8414946241 bytes
Total transferred file size: 8414932602 bytes
두 번째 줄에는 위의 예에서 파일 수가 150,481 개 있습니다. 보너스로 전체 크기도 바이트 단위로 얻습니다.
비고 :
- 첫 번째 줄은 파일, 디렉토리, 심볼릭 링크 등을 모두 합한 것이므로 두 번째 줄보다 큽니다.
--dry-run
(또는-n
짧은) 옵션은 실제로 파일을 전송하지하는 것이 중요합니다!-x
“파일 시스템 경계를 넘지 않음”옵션을 사용했습니다. 즉, 파일 시스템을 실행하고/
외부 하드 디스크를 연결 한 경우 루트 파티션의 파일 만 계산합니다.
답변
UNIX의 파일 이름에는 개행 (예, 개행)이 포함될 수 있으므로 wc -l
너무 많은 파일이 계산 될 수 있습니다. 모든 파일에 대해 점을 인쇄 한 다음 점을 계산합니다.
find DIR_NAME -type f -printf "." | wc -c
답변
여기에 몇 가지 답변을 결합하면 가장 유용한 해결책은 다음과 같습니다.
find . -maxdepth 1 -type d -print0 |
xargs -0 -I {} sh -c 'echo -e $(find "{}" -printf "\n" | wc -l) "{}"' |
sort -n
공백과 괄호를 포함하는 파일 이름과 같은 이상한 것을 처리 할 수 있습니다. 또한 파일 수에 따라 출력을 정렬합니다.
-maxdepth
하위 디렉토리도 계산 한 후 수를 늘릴 수 있습니다 . 특히 중첩 된 디렉토리 구조가 -maxdepth
많을 경우 높은 수의 디렉토리 구조를 사용하는 경우 시간이 오래 걸릴 수 있습니다.