Saya ingin menyalin satu direktori dengan sejumlah besar file ke tujuan lain. Aku melakukannya:
cp -r src_dir another_destination/
Kemudian saya ingin mengkonfirmasi bahwa ukuran direktori tujuan sama dengan yang asli:
du -s src_dir
3782288 src_dir
du -s another_destination/src_dir
3502320 another_destination/src_dir
Kemudian saya berpikir bahwa mungkin ada beberapa tautan simbolis yang tidak diikuti oleh cp
perintah dan menambahkan -a
bendera:
-a Sama seperti opsi -pPR. Mempertahankan struktur dan atribut file tetapi tidak struktur direktori.
cp -a src_dir another_destination/
tetapi du -s
memberi saya hasil yang sama. Sangat menarik bahwa sumber dan tujuan memiliki jumlah file dan direktori yang sama:
tree src_dir | wc -l
4293
tree another_destination/src_dir | wc -l
4293
Apa yang saya lakukan salah sehingga saya mendapatkan ukuran yang berbeda dengan du
perintah?
MEMPERBARUI
Ketika saya mencoba untuk mendapatkan ukuran direktori individu dengan du
perintah saya mendapatkan hasil yang berbeda:
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
Ketika saya melihat file dengan ls -la
, ukuran file individual adalah sama tetapi totalnya berbeda:
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
sumber
ls -la
hasil. Lihat PEMBARUANcp
sama besarnya dengan yang seharusnya.ls -ls
untuk melihat seberapa banyak ruang disk yang digunakan file.Jawaban:
Itu karena
du
secara default tidak menunjukkan ukuran file, tetapi ruang disk yang mereka gunakan. Anda perlu menggunakan-b
opsi untuk mendapatkan jumlah ukuran file, bukan total ruang disk yang digunakan. Sebagai contoh:Walaupun panjang file hanya 7 byte, itu akan menempati seluruh ruang disk 4096 byte (dalam contoh khusus saya; itu akan bervariasi tergantung pada sistem file yang digunakan, ukuran cluster dll).
Juga, beberapa filesystem mendukung apa yang disebut file jarang, yang tidak menggunakan ruang disk apa pun untuk blok yang semuanya nol. Sebagai contoh:
Singkatnya, untuk memverifikasi semua file telah disalin, Anda akan menggunakannya
du -sb
sebagai gantinyadu -s
.sumber
du
output: yang akan membuat file terkompresi terlihat jarang untuk program yang menggunakan algoritma panjang biasa! = blok yang digunakan. btrfs.wiki.kernel.org/index.php/…Mungkin karena ukuran "file" direktori.
Pada sebagian besar sistem file, pada disk, direktori mirip dengan file biasa (hanya dengan daftar nama dan nomor node, sebagian besar), menggunakan lebih banyak blok seiring pertumbuhannya.
Jika Anda menambahkan banyak file, direktori itu sendiri akan tumbuh. Tetapi jika Anda menghapusnya setelah itu, di banyak filesystem, direktori tidak akan menyusut.
Jadi, jika salah satu direktori di pohon asli Anda memiliki banyak file di beberapa titik, yang kemudian dihapus, salinan direktori itu akan "lebih kecil", karena hanya menggunakan blok sebanyak yang diperlukan untuk jumlah file saat ini.
Dalam daftar di pembaruan Anda, ada 3 direktori yang belum Anda daftarkan. Bandingkan ukuran mereka (atau keturunan mereka) dalam
ls -al
hasil Anda .Untuk menemukan di mana perbedaannya, Anda dapat mencoba
ls -alr
di kedua direktori, diarahkan ke file, dan kemudiandiff
dari dua output.sumber
cp -a src_dir another_destination/
tidak mungkin, seperti yanganother_destionation
akan baru dibuat dan dengan demikian dioptimalkan, sementarasrc_dir
(yang mungkin memiliki beberapa direktori yang lebih besar dari pembuatan / penambahan masa lalu) memang bisa lebih besar dari yang dibutuhkan. Namun hasil menunjukkan bahwasrc_dir
sebenarnya lebih kecil (1112 < 1168
).> In the listings in your update, there are 3 directories you haven't listed
. Sebenarnya mereka adalah file, bukan direktori. lihat nama file> if one of the directories in your original tree had many files at some point, which were later deleted
. Saya menyalin direktori sumber dari server jauh dengan perintah rsync dan tidak menghapus apa pun darinya.
entri menampilkan 5 tautan pada inode. Salah satunya adalah tautan dari direktori induk ke yang ini. Yang lain adalah.
. Ada 3 tautan lagi, yang seharusnya berupa..
tautan dari subdirektori. Kecuali saya kehilangan sesuatu yang sangat aneh, pasti ada 3 subdirektori di dalamnya. Apakah Anda mengatakan bahwa daftar itu adalah hasil lengkap?