Czy istnieje sposób na dodanie / aktualizację pliku w archiwum tar.gz? Zasadniczo mam archiwum zawierające plik /data/data/com.myapp.backup/./files/settings.txt
i chciałbym pobrać ten plik z archiwum (już zrobiony) i wcisnąć go z powrotem do archiwum po zakończeniu edycji. Jak mogę to osiągnąć? Czy jest to problematyczne z powodu .
ścieżki?
73
.DS_Store
a następnie ponownie załadować go do katalogu.Odpowiedzi:
Format pliku tar to tylko seria plików połączonych z kilkoma nagłówkami. Nie jest to bardzo skomplikowane zadanie, aby rozerwać je na części, włożyć zawartość i ponownie złożyć. To powiedziawszy, Jander opisał, w jaki sposób tar jako program nie ma funkcji narzędziowych do wykonania tego i istnieją dodatkowe komplikacje z kompresją, które muszą być zarówno przed, jak i po dokonaniu zmiany.
Istnieją jednak narzędzia do tego zadania! Istnieją co najmniej dwa systemy, które pozwolą ci na wykonanie sprzężenia zwrotnego skompresowanego archiwum tar na folder, a następnie dokonanie zmian w systemie plików. Po zakończeniu odłącz folder, a skompresowane archiwum jest gotowe do uruchomienia.
Pierwszą opcją byłby projekt archiwizacji dla FUSE . Oto samouczek na ten temat . Twój system prawdopodobnie ma już BEZPIECZNIK, a jeśli nie, Twoja dystrybucja powinna mieć taką opcję.
Inną opcją są tarfs . Jest prostszy w użyciu , ale słyszałem, że ma pewne problemy z uszkodzeniem archiwów bzip2, więc możesz najpierw przetestować to dość dokładnie.
źródło
Aby pobrać plik z archiwum, możesz użyć
tar xzf archive.tar.gz my/path/to/file.txt
. Pamiętaj, że zostaną również utworzone katalogi na ścieżce pliku. Użyjtar t
(tj.tar tzf archive.tar.gz
), Aby wyświetlić listę plików w archiwum.tar
nie obsługuje aktualizacji plików „w miejscu”. Można jednak dodawać pliki na końcu archiwum, nawet jeśli mają taką samą ścieżkę jak plik już w archiwum. W takim przypadku obie kopie pliku znajdą się w archiwum, a plik dodany później zastąpi wcześniejszą. Poleceniem do tego jesttar r
(lubtar u
tylko dodawanie plików nowszych niż archiwum) to polecenie, którego należy użyć..
W ścieżce nie powinno być problemem.Jest jednak pewien haczyk: nie można dodawać do skompresowanego archiwum. Więc musisz zrobić:
Co prawdopodobnie nie jest tym, co chcesz usłyszeć, ponieważ oznacza to dwukrotne przepisanie całego archiwum. Jeśli nie jest to bardzo duże archiwum, może być lepiej rozpakować całość, a następnie przesłać ją ponownie po edycji. Alternatywnie możesz użyć nieskompresowanego archiwum.
źródło
tar
programu. Tar jako format pliku jest w rzeczywistości bardzo dostępny. Możesz łatwo napisać skrypt, aby samodzielnie zaktualizować zawartość, ale istnieją już inne narzędzia, które to robią .gzip -dc archive.tar.gz | tar -r data/data/com.myapp.backup/./files/settings.txt | gzip >archive_new.tar.gz
Tar był pierwotnie przeznaczony do stosowania na taśmach, więc „zastępowanie” plików nie jest tak naprawdę w projekcie. Możesz jednak użyć opcji --delete, aby usunąć plik z oryginalnej tar, a następnie -u, aby zaktualizować tar i ponownie dodać plik. Może to zająć trochę czasu, ponieważ tar musi wewnętrznie zreorganizować archiwum.
źródło
na moim systemie Linux x86_64 GNU / Linux do wykonania tej operacji używam po prostu następującej komendy:
To polecenie powoduje utworzenie skompresowanego archiwum przy
/path
użyciu listy plików zawartych wlist.txt
pliku.źródło
/path/archive.tar
, zamiast dodawać / aktualizować ten plik.