Linux-Shell: Packen Sie ein bz2-Archiv in xz

3228
osgx

Wie kann ich das .bz2-Archiv im .xz-Format neu packen, wenn ich den Datumsstempel der Datei und deren chmod-chown-Einstellungen speichern möchte?

Ich kann alle Standardwerkzeuge und xz, lzma, p7zip verwenden

4

2 Antworten auf die Frage

4
billc.cn

Sie können einfach bzcatdie bzip2-Komprimierung entfernen, aber das tar-Format beibehalten und die Ergebnisse dann weiterleiten xz:

bzcat file.tar.bz | xz > file.tar.xz 

Sie können Ihre Komprimierungsoptionen xzwie üblich hinzufügen, aber den Dateinamen weglassen, damit die Standardeingabe verwendet wird.

und wie "Datenstempel der Datei und deren chmod-chown-Einstellungen speichern?" osgx vor 12 Jahren 0
Die Metadaten der Datei werden in der TAR-Datei gespeichert und nicht vom Kompressionsalgorithmus behandelt. Wenn Sie den Teer nicht berühren, wird nichts geändert. Wenn Sie eine Datei ohne tar komprimiert haben, haben Sie sowieso schon alle Metainformationen verloren. billc.cn vor 12 Jahren 0
Entschuldigung, ich habe nicht nach "tar.bz2" gefragt, sondern nach "bz2". Sie haben in Ihrer Antwort Tar hinzugefügt. Ich möchte den Stempel der File.bz2 speichern (File.xz sollte den gleichen Stempel haben). osgx vor 12 Jahren 0
In diesem Fall hat die Frage nichts mit bzip oder xz zu tun, da diese Formate KEINE Zeitstempel in der Archivdatei speichern. Beim Dekomprimieren wird der Zeitstempel der komprimierten Datei für die Ausgabe verwendet. Um den Zeitstempel einer Datei festzulegen, können Sie "touch" verwenden. ls hat zusätzliche Optionen, um die vollständige der Originaldatei anzuzeigen. billc.cn vor 12 Jahren 0
Nicht das Innere einer Datei, sondern das Archiv selbst. Ich möchte viele bzip2-Sicherungen mit xz neu packen, und der Zeitstempel des Archivs ist in meinem Fall wertvolle Informationen. osgx vor 12 Jahren 0
Dann können Sie `ls` (oder` stat`) verwenden, um die Datumsangaben von bzip2 zu erhalten, und `touch 'verwenden, um sie auf die neuen XZs zu setzen. Sie müssen dazu wahrscheinlich ein Shell-Skript schreiben. billc.cn vor 12 Jahren 0
Es ist schwierig, die Ausgabe von ls zu analysieren, da sie in einem anderen Format vorliegt. Ich habe wirklich viele Dateien und kann nicht von Hand konvertieren. Älteste Dateien sind vor 4 Jahren vorhanden, neuere sind mehrere Wochen. osgx vor 12 Jahren 0
Verwenden Sie in diesem Fall `stat -c% X`, um die Rohwerte zu erhalten. Ändern Sie X für Y und Z, um die Zeit für Änderungen zu ändern. Siehe die Manpage für `stat`. billc.cn vor 12 Jahren 1
2
brightlancer

Sie müssen dies in zwei Teile aufteilen

1) Von bz2 in xz konvertieren, woraufhin billc.cn antwortete

2) Korrigieren Sie den Besitz, die Berechtigungen und den Zeitstempel der xz-Datei, damit sie mit bz2 übereinstimmen.

chown "`stat --printf '%u:%g' file.bz2`" file.xz chmod "`stat -c '%a' file.bz2`" file.xz touch -a -d "`stat -c '%x' file.bz2`" file.xz touch -m -d "`stat -c '%y' file.bz2`" file.xz