Ich bin dabei, ein großes Verzeichnis zu komprimieren, und ich möchte wissen, wie groß die resultierende Datei genau sein wird.
Ich habe versucht du
:
$ tar -cv dir | du -h -
du: cannot access '-': No such file or directory
Dann habe ich versucht, die Dateiversion von '-' zu verwenden:
$ tar -cv dir | du -h /dev/stdin
1.0K
Ich bin sicher, dass diese Zahl nicht korrekt ist. Wie kann ich die Größe von stdin bekommen?
wc
das Überflüssige einfach weglassen .-
cut
Mit GNU können
tar
Sie einfach Folgendes tun:... was die Ausgabe wie ...
... auf stderr. In ähnlicher Weise mit jedem Teer (oder Strom) können Sie verwenden
dd
einen Bericht über Bytezählwerte zu liefern. Dies kann vorzuziehen sein oder nichtwc
, ist jedochdd
standardmäßig auf eine Blockgröße von 512 Bytes eingestellt - was mit dertar
Blockgröße identisch ist . Wenn die PIPE_BUF Ihres Systems groß genug ist, können Sie diedd
Blockgröße sogar erweitern , um sie an die Datensatzgröße anzupassentar
- 20 Blöcke oder 10240 Byte. So was:Dies kann eine leistungsfähigere Lösung bieten als oder nicht
wc
.Sowohl im
dd
als auch imtar
Anwendungsfall müssen Sie den Stream jedoch nicht wirklich entsorgen. Ich leite nach/dev/null
oben um - aber ich hätte genauso gut zu einer Datei umleiten können und trotzdem den Bericht über seine Größe zum Zeitpunkt des Schreibens erhalten.quelle
dd
(im Vergleich zuwc
).dd
die Ausgabe an einen Kompressor weitergeleitet wird - und aus irgendeinem Grund ist es wünschenswert, sowohl die Rohgröße des Archivs als auch die komprimierte zu kennen. Es ist auch nützlich, sofort einen Bericht über die Anzahl der Datensätze zu erhalten - diestar
ist nicht nur ein Archiv, sondern ein Stream-Format. Es kann auf andere Weise verwendet werden, als nur in einer Gruppe von Dateien in einer anderen Datei zu speichern. Es ist oft nützlich, um einen Stream zu blockieren, bevor Sie ihn ändern. An jeder dieser Datensatzgrenzen befindet sich ein ganzer Block von NULs.Ich würde vorschlagen:
Ein einfaches
c
(kein Leading-
erforderlich) wird verwendet, um eintar
Archiv zu erstellen ,f
gibt eine Ausgabedatei an und gibt an,-
dass es stdout ist . (Beachten Sie, dass , wenn Sie wollen einfach nur die Größe und es gibt viele Dateien unter dir Sie können eher auslassentar
‚sv
aus Leistungsgründen.)quelle
tar
in der Vergangenheit mit s gearbeitet habe, wo die Angabe einer TAR-Datei (alsof
und-
) erforderlich war. - Ich habe es gerade nachgeschlagen. ohnef
-
die als Standardtar
angenommen/etc/mt0
./etc/mt0
eigentlich bedeutet - "Magnetband" ;-) Ich würde mich interessieren, wie sich Solaristar
verhält (weil Solaris eines der zeitgenössischen Betriebssysteme ist, von denen bekannt ist, dass sie noch sehr alte Sachen enthalten/bin
).-f
Flagge zutar
?Der Wortlaut Ihrer Frage eignet sich für die
tar ... | wc -c
obigen Antworten. Ich habe Ihre Frage ursprünglich mit der stillen Annahme gelesen, dass die Größe beim Erstellen der TAR-Datei gemeldet werden soll (möglicherweise wurde die Ausgabe von TAR dann über eine Netzwerkverbindung weitergeleitet?).In diesem Fall würde ich vorschlagen
pv
- Pipe Viewer. Ich habe einen Hinweis darauf gesehen, aber noch keine Chance gehabt, damit zu spielen.Verweise
quelle