일부 파일 그룹의 크기를 찾으려면

일부 파일 그룹의 크기를 찾으려면

특정 사용자가 소유한 모든 파일의 전체 크기를 알아내려고 했습니다.

그렇게 시도하는 동안 다른 명령을 실행할 때 크기가 달라집니다.

특정 사용자가 소유한 모든 파일의 전체 크기를 알아내는 데 올바른 명령은 무엇입니까?

$ find . -type f -user silviya|ls -lh|head -1 
total 68K
$ find . -type f -user agalya|wc -c
284
$ find . -type f -user agalya|du -sk
120 .

이 변화의 이유는 무엇입니까?

답변1

안에:

find . -type f -user silviya|ls -lh|head -1 

find의 출력을 파이핑하고 있지만 ls입력 ls을 읽지 않습니다. 인수로 나열할 파일 목록을 사용합니다. 여기에 같은 인수가 없으면 현재 디렉터리에 숨겨지지 않은 파일이 나열됩니다. 따라서 여기서는 현재 디렉터리에 있는 모든 유형의 숨겨진 파일(모든 유형)의 디스크 사용량을 얻을 수 있습니다(각 하드 링크에 대해 계산된 특정 파일의 크기 포함).

안에:

find . -type f -user agalya|wc -c

의 출력에서 ​​바이트 수를 계산하므로 find이는 디스크 사용량이나 파일 크기가 아닌 파일 경로(및 개행 구분 기호)의 크기입니다.

안에:

find . -type f -user agalya|du -sk

ls와 마찬가지로 du파일 목록을 입력이 아닌 인수로 사용합니다. 따라서 여기서는 현재 디렉터리에 있는 모든 파일과 디렉터리의 디스크 사용량을 (반복적으로) 얻습니다.

GNU 유틸리티를 사용하여 가 소유한 모든 일반 파일의 디스크 사용량을 얻으려면 agalya다음을 수행합니다.

find . -type f -user agalya -print0 | du -hc --files0-from=- | tail -n 1

--files0-from표준 입력(여기에 표시됨)에서 파일 목록을 가져오라고 지시합니다 du(GNU 에만 해당) . 누적 크기를 제공합니다(동일한 파일의 하드 링크는 한 번만 계산됩니다).du--c

파일을 얻으려면명백한디스크 사용량과 반대로 크기를 조정하려면 (다시 GNU에 따라) --apparent-size옵션을 추가하세요. 하드 링크를 여러 번 계산하는 옵션(GNU 전용)을 du추가하세요 .-l

답변2

명령 #1은 파일 내용의 "유용한" 바이트의 총 크기를 제공합니다.

명령 #3은 파일을 보관하기 위해 사용된 디스크 공간을 제공합니다. 디스크는 여러 파일에서 공유할 수 없는 블록(종종 4kB 길이)으로 나뉩니다. 따라서 1에서 4096B 사이의 모든 크기의 파일은 4kB의 디스크 공간을 사용합니다. 예: [이것은 단순화되었습니다. ext와 같은 일부 FS 유형에서는 데이터 블록을 전혀 사용하지 않고 매우 작은 파일을 파일 테이블 자체에 저장할 수 있습니다.]

명령 #2는 단지 문자 수를 계산합니다.파일 이름. (명령 출력의 크기 find.)

관련 정보