파일 시스템에서 파일 수를 찾는 방법은 무엇입니까?

파일 시스템에서 파일 수를 찾는 방법은 무엇입니까?

내 파일 시스템에 몇 개의 파일이 있는지 알고 싶습니다. 나는 다음과 같은 일을 할 수 있다는 것을 알고 있습니다.

find / -type f | wc -l

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

더 좋은 방법이 있나요?

노트:

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

답변1

--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보다 크고 /home보다 적습니다. IUsed하지만 둘 다 0.0005% 이내입니다. 차이점이 있는 이유는 하드 링크 및 유사한 상황 때문입니다.

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

답변2

사용statvfs(), 그리고 계산합니다 f_files - f_ffree.

관련 정보