파일 시스템에서 파일 수를 어떻게 찾을 수 있습니까?


26

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

find / -type f | wc -l

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

더 좋은 방법이 있습니까?

노트 :

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

답변:


34

--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통계적 관점에서 플래그를 사용하는 것은 매우 부정확합니다.


나는 이것이 내가 찾고있는 것이라고 생각합니다. 각 유형의 파일이 몇 개나 있는지 알 수있는 방법이 있습니까? 이것은 내 응용 프로그램에서 직접 필요하지는 않지만 유용한 지식이 될 수 있습니다.
beatgammit

1
파일 시스템에있는 각 파일의 inode를 검사하지 않으면 찾기와 거의 동일합니다.
Arcege

df는 대부분의 파일 시스템 (ext2-4, ntfs, fat, reiserfs 등)을 이해합니까?
beatgammit

마운트 할 수있는 모든 파일 시스템 유형을 이해합니다. 일부 파일 시스템 유형에는 inode가 없습니다 (예 : fat). df해당 파일 시스템에서 총 inode 수를 0으로 표시합니다. 다른 유형에는 기본 파일 시스템의 inode 통계가 표시되어야합니다.
Arcege

/dev/null파일 /proc이 "가상" 이라는 경고 메시지가 표시되면 오류를 보고 다시 리디렉션해야 합니까?
n0pe

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.