많은 파일을 가진 하나의 디렉토리를 다른 대상으로 복사하려고합니다. 나는했다 :
cp -r src_dir another_destination/
그런 다음 대상 디렉토리의 크기가 원래 디렉토리의 크기와 동일한 지 확인하고 싶습니다.
du -s src_dir
3782288 src_dir
du -s another_destination/src_dir
3502320 another_destination/src_dir
그런 다음 cp
명령이 따르지 않고 몇 가지 기호 링크가있을 수 있다고 생각 하고 -a
플래그를 추가했습니다 .
-a -pPR 옵션과 동일합니다. 디렉토리 구조가 아닌 파일의 구조와 속성을 유지합니다.
cp -a src_dir another_destination/
그러나 du -s
나에게 같은 결과를 주었다. 소스와 대상 모두 동일한 수의 파일과 디렉토리를 가지고 있다는 것이 흥미 롭습니다.
tree src_dir | wc -l
4293
tree another_destination/src_dir | wc -l
4293
du
명령으로 다른 크기를 얻는 것은 무엇을 잘못하고 있습니까?
최신 정보
du
명령 으로 개별 디렉토리의 크기를 얻으려고 하면 다른 결과가 나타납니다.
du -s src_dir/sub_dir1
1112 src_dir/sub_dir1
du -s another_destination/src_dir/sub_dir1
1168 another_destination/src_dir/sub_dir1
로 파일을 볼 때 ls -la
개별 파일 크기는 동일하지만 총계가 다릅니다.
ls -la src_dir/sub_dir1
total 1168
drwxr-xr-x 5 hirurg103 staff 160 Jan 30 20:58 .
drwxr-xr-x 1109 hirurg103 staff 35488 Jan 30 21:43 ..
-rw-r--r-- 1 hirurg103 staff 431953 Jan 30 20:58 file1.pdf
-rw-r--r-- 1 hirurg103 staff 126667 Jan 30 20:54 file2.png
-rw-r--r-- 1 hirurg103 staff 7386 Jan 30 20:49 file3.png
ls -la another_destination/src_dir/sub_dir1
total 1112
drwxr-xr-x 5 hirurg103 staff 160 Jan 30 20:58 .
drwxr-xr-x 1109 hirurg103 staff 35488 Jan 30 21:43 ..
-rw-r--r-- 1 hirurg103 staff 431953 Jan 30 20:58 file1.pdf
-rw-r--r-- 1 hirurg103 staff 126667 Jan 30 20:54 file2.png
-rw-r--r-- 1 hirurg103 staff 7386 Jan 30 20:49 file3.png
답변
그 때문입니다 du
기본 프로그램이 아닌 파일 (들)의 크기,하지만 그들은 사용하는 디스크 공간. 사용 된 -b
총 디스크 공간 대신 파일 크기의 합계를 얻으려면 이 옵션 을 사용해야합니다 . 예를 들면 다음과 같습니다.
% printf test123 > a
% ls -l a
-rw-r--r-- 1 mnalis mnalis 7 Feb 1 19:57 a
% du -h a
4,0K a
% du -hb a
7 a
파일 길이가 7 바이트에 불과하더라도 전체 4096 바이트의 디스크 공간을 차지합니다 (특정 예에서는 사용 된 파일 시스템, 클러스터 크기 등에 따라 다름).
또한 일부 파일 시스템은 소위 스파 스 파일을 지원하는데,이 파일은 모두 0 인 블록에 디스크 공간을 사용하지 않습니다. 예를 들면 다음과 같습니다.
% dd if=/dev/zero of=regular.bin bs=4k count=10
10+0 records in
10+0 records out
40960 bytes (41 kB, 40 KiB) copied, 0,000131003 s, 313 MB/s
% cp --sparse=always regular.bin sparse.bin
% ls -l *.bin
-rw-r--r-- 1 mnalis mnalis 40960 Feb 1 20:04 regular.bin
-rw-r--r-- 1 mnalis mnalis 40960 Feb 1 20:04 sparse.bin
% du -h *.bin
40K regular.bin
0 sparse.bin
% du -hb *.bin
40960 regular.bin
40960 sparse.bin
즉, 모든 파일이 복사되었는지 확인하려면 du -sb
대신을 사용하십시오 du -s
.
답변
“files”디렉토리의 크기 때문일 수 있습니다.
대부분의 파일 시스템, 디스크에서 디렉토리는 일반 파일 (주로 이름과 노드 번호 목록 만 있음)과 비슷하며, 블록이 커질수록 더 많은 블록을 사용합니다.
많은 파일을 추가하면 디렉토리 자체가 커집니다. 그러나 나중에 많은 파일 시스템에서 제거하면 디렉토리가 축소되지 않습니다.
따라서 원래 트리의 디렉토리 중 하나에 특정 시점에 많은 파일이 있고 나중에 삭제 된 경우 해당 디렉토리의 사본은 현재 파일 수에 필요한만큼의 블록 만 사용하므로 “더 작아집니다”.
업데이트 목록에는 나열하지 않은 3 개의 디렉토리가 있습니다. ls -al
결과물 에서 그 (또는 그 자손)의 크기를 비교하십시오 .
차이점이있는 곳을 찾으려면 ls -alr
두 디렉토리 모두에서 파일로 리디렉션 한 다음 diff
두 출력 중 하나 를 시도 하십시오 .