Ich möchte ein Verzeichnis mit einer großen Anzahl von Dateien an ein anderes Ziel kopieren. Ich tat:
cp -r src_dir another_destination/
Dann wollte ich bestätigen, dass die Größe des Zielverzeichnisses mit der des Originals übereinstimmt:
du -s src_dir
3782288 src_dir
du -s another_destination/src_dir
3502320 another_destination/src_dir
Dann hatte ich den Gedanken, dass es mehrere symbolische Links geben könnte, denen der cp
Befehl nicht folgt, und fügte das -a
Flag hinzu :
-a Entspricht den Optionen für -pPR. Erhält die Struktur und Attribute von Dateien, jedoch nicht die Verzeichnisstruktur.
cp -a src_dir another_destination/
aber du -s
gab mir die gleichen Ergebnisse. Es ist interessant, dass sowohl die Quelle als auch das Ziel die gleiche Anzahl von Dateien und Verzeichnissen haben:
tree src_dir | wc -l
4293
tree another_destination/src_dir | wc -l
4293
Was mache ich falsch, dass ich mit dem du
Befehl unterschiedliche Größen bekomme ?
AKTUALISIEREN
Wenn ich mit dem du
Befehl versuche, die Größe einzelner Verzeichnisse zu ermitteln, erhalte ich unterschiedliche Ergebnisse:
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
Wenn ich Dateien mit ls -la
ansehe, sind die einzelnen Dateigrößen gleich, aber die Gesamtsummen sind unterschiedlich:
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
quelle
ls -la
Ergebnissen aktualisiert . Siehe UPDATEcp
sind genau so groß wie sie sein müssen.ls -ls
diese Option , um festzustellen , wie viel Speicherplatz die Dateien belegen.Antworten:
Dies liegt daran, dass
du
standardmäßig nicht die Größe der Datei (en) angezeigt wird, sondern der von ihnen verwendete Speicherplatz. Sie müssen die-b
Option verwenden, um die Summe der Dateigrößen anstelle des gesamten verwendeten Speicherplatzes abzurufen. Beispielsweise:Obwohl die Datei nur 7 Byte lang ist, belegt sie insgesamt 4096 Byte Festplattenspeicher (in meinem speziellen Beispiel; dies hängt vom verwendeten Dateisystem, der Clustergröße usw. ab).
Einige Dateisysteme unterstützen auch so genannte Sparse-Dateien, die keinen Speicherplatz für Blöcke verwenden, die ausschließlich Nullen sind. Beispielsweise:
Kurz gesagt, um zu überprüfen, ob alle Dateien kopiert wurden, verwenden Sie
du -sb
stattdu -s
.quelle
du
Ausgabe aus. Dadurch werden komprimierte Dateien für Programme, die den üblichen Algorithmus der Länge verwenden, spärlich dargestellt! = verwendete Blöcke. btrfs.wiki.kernel.org/index.php/…Dies kann an der Größe des Verzeichnisses "files" liegen.
In den meisten Dateisystemen auf der Festplatte ähnelt ein Verzeichnis einer regulären Datei (meist nur eine Liste mit Namen und Knotennummern), wobei mehr Blöcke verwendet werden, wenn sie größer werden.
Wenn Sie viele Dateien hinzufügen, vergrößert sich das Verzeichnis. Wenn Sie sie jedoch später entfernen, wird das Verzeichnis in vielen Dateisystemen nicht verkleinert.
Wenn also eines der Verzeichnisse in Ihrem ursprünglichen Baum zu einem bestimmten Zeitpunkt viele Dateien enthielt, die später gelöscht wurden, ist die Kopie dieses Verzeichnisses "kleiner", da nur so viele Blöcke verwendet werden, wie für die aktuelle Anzahl von Dateien erforderlich sind.
In den Einträgen in Ihrem Update befinden sich 3 Verzeichnisse, die Sie nicht aufgelistet haben. Vergleichen Sie die Größe dieser (oder ihrer Nachkommen) in Ihrer
ls -al
Ausgabe.Um herauszufinden, wo der Unterschied liegt, können Sie
ls -alr
in beiden Verzeichnissen ein und anschließend einediff
der beiden Ausgaben versuchen .quelle
cp -a src_dir another_destination/
es jedoch unwahrscheinlich,another_destionation
dass sie neu erstellt und somit optimiert werden, während siesrc_dir
(die möglicherweise größere Verzeichnisse aus früheren Erstellungs- / Ergänzungsvorgängen hatten) tatsächlich größer als erforderlich sein könnten. Die Ergebnisse zeigen jedoch, dasssrc_dir
das tatsächlich kleiner ist (1112 < 1168
).> In the listings in your update, there are 3 directories you haven't listed
. Eigentlich sind es Dateien, keine Verzeichnisse. Siehe die Dateinamen> if one of the directories in your original tree had many files at some point, which were later deleted
. Ich habe das Quellverzeichnis von einem Remote-Server mit dem Befehl rsync kopiert und nichts davon gelöscht.
Einträge zeigen 5 Links auf der Inode. Eine ist die Verknüpfung vom übergeordneten Verzeichnis zu diesem. Ein anderer ist.
. Es gibt 3 weitere Links, die..
Links aus Unterverzeichnissen sein sollten. Es sei denn, ich vermisse etwas sehr Seltsames, es müssen 3 Unterverzeichnisse in diesen sein. Wollen Sie damit sagen, dass diese Auflistungen die volle Ausgabe sind?