파일 시스템에서 파일 수를 어떻게 찾을 수 있습니까? 좋은 방법이

파일 시스템에 몇 개의 파일이 있는지 알고 싶습니다. 나는 이런 식으로 할 수 있다는 것을 안다.

find / -type f | wc -l

이것은 매우 비효율적입니다. 내가 정말로 원하는 것은 ‘파일’로 간주되는 고유 한 inode의 총 수를 찾는 것입니다.

더 좋은 방법이 있습니까?

노트 :

파일 동기화 프로그램을 개발 중이기 때문에이 작업을 수행하고 싶습니다. 통계 사용자가 총 파일 수와 시스템의 파일 수와 같은 통계 분석을하고 싶습니다. 그러나 나는 그 파일에 대해 아무것도 알 필요가 없으며 파일이 존재한다는 것만 (경로는 중요하지 않습니다) 마운트 된 각 파일 시스템 (및 관련 마운트 지점)에 대해이 정보를 알고 싶습니다.



답변

–inodes 옵션 df은 사용하도록 예약 된 inode 수를 알려줍니다. 예를 들면 다음과 같습니다.

$ df --inodes / /home
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1            3981312  641704 3339608   17% /
/dev/sda8            30588928  332207 30256721    2% /home
$ sudo find / -xdev -print | wc -l
642070
$ sudo find /home -print | wc -l
332158
$ sudo find /home -type f -print | wc -l
284204

공지 사항에서 반환 된 항목 수가 있다는 find보다 클 IUsed루트 (/) 파일 시스템에 대한,하지만 적은 / 가정이다. 그러나 둘 다 0.0005 % 이내입니다. 불일치의 이유는 하드 링크 및 유사한 상황 때문입니다.

디렉토리, 심볼릭 링크, UNIX 도메인 소켓 및 명명 된 파이프는 파일 시스템과 관련하여 모두 ‘파일’입니다. 따라서 find -type f통계적 관점에서 플래그를 사용하는 것은 매우 부정확합니다.


답변

를 사용 statvfs()하고 계산하십시오 f_files - f_ffree.