하드 링크를 무시하고 폴더 크기를 얻는 방법은 무엇입니까?


16

백업에 rsnapshot을 사용하여 동일한 이름의 파일을 포함하는 일련의 폴더를 생성합니다. 일부 파일은 하드 링크 된 반면 다른 파일은 분리되어 있습니다. 예를 들어, hourly.1/file1hourly.2/file1동안 하드, 같은 파일에 링크 할 수 hourly.1/file2hourly.2/file2완전히 별도의 파일입니다.

의 파일에 대한 하드 링크 인 파일을 hourly.2 무시하고 폴더가 사용하는 공간을 찾고 싶습니다 hourly.1. 위의 예에서 file2의 크기를 얻고 싶지만 file1은 무시하고 싶습니다.

Linux에서 bash를 사용하고 있으며 가능한 한 간단하게 명령 줄 에서이 작업을 수행하려고하므로 큰 그래픽 또는 다른 OS 전용 솔루션을 사용하지 마십시오.

답변:


7

hourly.2링크가 하나만있는 모든 파일의 총 크기 (바이트) :

$ find ./hourly.2 -type f -links 1 -printf "%s\n" | awk '{s=s+$1} END {print s}'

에서 find사람 페이지 :

   -links n
          File has n links.

바이트 대신 킬로바이트 단위로 합계를 얻으려면 -printf "%k\n"

링크 수가 다른 파일을 나열하려면 find -links +1(하나 이상의 링크), find -links -5(5 개의 링크 미만 ) 등을 가지고 놀아보십시오 .


1
에 파일에 대한 하드 링크가있는 파일이 hourly2있으면 명령이 잘못 응답합니다.
cuonglm

@Gnouc-글쎄요-파일이 어떻게 끝나는가에 달려 hourly.2있습니다. 거기에 복사되면 추가 링크가 없으며 내 명령이 작동합니다. 그들이 하드 링크되어 있다면 분명히 실패 할 것입니다. 새 백업 파일이 복사되었다고 가정합니다.
grebneke

11

아래에 hourly.2있지만 아래 hourly.1에 없는 파일의 크기를 구체적으로 원한다면 약간 간접적으로 얻을 수 있습니다 du. 경우 du같은 파일을 두 번 이상 프로세스 (심지어 다른 이름으로, 하드 링크를 즉), 그것은 단지 파일을 처음 계산합니다. 그래서 du hourly.1 hourly.2에 대해보고하는 것은 hourly.2당신이 찾고있는 크기입니다. 그러므로:

du -ks hourly.1 hourly.2 | sed -n '2s/[^0-9]*//p'

(POSIX 시스템 및 대부분의 다른 유닉스 변형에서 작동합니다. 디렉토리 이름에 hourly.1줄 바꿈이 포함되어 있지 않다고 가정합니다 .)


이상한 이유로 du가 RHEL5에서 하드 링크 된 파일을 항상 인식하지는 않습니다 .'du -sh dir / sub dir '을 수행하면 dir의 출력은 방금'du -sh dir '이라고 말한 것과 같습니다-크기를 제외하지 않습니다 'dir / sub'의
Andreas Krey

8

@Gilles가 말했듯이, du동일한 inode를 가리키는 모든 하드 링크 중 첫 번째 만 계산하므로 디렉토리를 연속으로 줄 수 있습니다.

$ du -hc --max-depth=0 dirA dirB
29G /hourly.1
 1G /hourly.2
30G total

즉, 'hourly.1'에서 이미 참조 된 inode (일명 "실제"파일)를 참조하는 'hourly.2'의 파일은 계산되지 않습니다.


2
du --help 에 따르면 --max-depth = 0 옵션 은 -s 와 동일 하므로 위와 같이 단축 할 수 있습니다.$ du -hcs dirA dirB
akavel


1

더 간단한

du -hc --max-depth=1 path/

9.4G    daily/users/rockspa/home/daily.21
3.6G    daily/users/rockspa/home/daily.30
4.2G    daily/users/rockspa/home/daily.11
1.1G    daily/users/rockspa/home/daily.4
4.2G    daily/users/rockspa/home/daily.9
3.0G    daily/users/rockspa/home/daily.25
3.5G    daily/users/rockspa/home/daily.20
4.2G    daily/users/rockspa/home/daily.13
913M    daily/users/rockspa/home/daily.5
2.8G    daily/users/rockspa/home/daily.26
1.4G    daily/users/rockspa/home/daily.1
2.6G    daily/users/rockspa/home/daily.28
4.2G    daily/users/rockspa/home/daily.15
3.8G    daily/users/rockspa/home/daily.19
327M    daily/users/rockspa/home/daily.8
4.2G    daily/users/rockspa/home/daily.17
3.1G    daily/users/rockspa/home/daily.23
...

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