Powłoka Linux: przepakuj archiwum BZ2 do XZ

4

Jak mogę ponownie spakować archiwum .bz2 do formatu .xz, jeśli chcę zapisać znacznik danych pliku i jego ustawienia chmod-chown?

Mogę używać dowolnych standardowych narzędzi oraz xz, lzma, p7zip

osgx
źródło

Odpowiedzi:

2

Musisz podzielić to na dwie części

1) Konwertuj z bz2 na xz, na które odpowiedział billc.cn

2) Napraw własność, uprawnienia i znacznik czasu pliku xz, aby pasował do bz2.

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
Brightlancer
źródło
5

Możesz po prostu użyć bzcatdo usunięcia kompresji bzip2, ale zachowaj format tar, a następnie potokuj wyniki do xz:

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

Możesz dodać swoje opcje kompresji xzjak zwykle, ale po prostu pomiń nazwę pliku, aby użyć standardowego wejścia.

billc.cn
źródło
i jak „zapisać znacznik danych pliku i jego ustawienia chmod-chown?”
osgx,
Informacje meta pliku są przechowywane w pliku tar i nie są obsługiwane przez algorytm kompresji. Jeśli nie dotkniesz smoły, nic się nie zmieni. Jeśli skompresowałeś plik bez tar, i tak straciłeś już wszystkie informacje meta.
billc.cn
przepraszam, nie pytałem o „tar.bz2”, ale o „bz2”. W Twojej odpowiedzi dodałeś smołę. Chcę zapisać znaczek pliku File.bz2 (plik.xz powinien mieć ten sam znaczek).
osgx
W takim przypadku pytanie nie ma nic wspólnego z bzip lub xz, ponieważ formaty te NIE przechowują znaczników czasu w pliku archiwum. Podczas dekompresji znacznik czasu skompresowanego pliku zostanie użyty jako wynik. Aby ustawić znacznik czasu pliku, możesz użyć touch. lsma dodatkowe opcje wyświetlania pełnego czasu {tworzenie, dostęp, modyfikacja} oryginalnego pliku.
billc.cn
1
W takim przypadku użyj, stat -c %Xaby uzyskać surowe wartości. Zmień X na Y i Z, aby uzyskać modyfikację i zmienić czas. Zobacz stronę podręcznika dla stat.
billc.cn