Jak mogę zaktualizować plik tar.gz?

32

Utworzyłem plik tar.gz (używając GUI, a nie wiersza poleceń). Jak mogę go zaktualizować poleceniem dodawania nowych plików i aktualizowania plików zmodyfikowanych?

Xpanta
źródło
1
Zobacz także unix.stackexchange.com/questions/13093/…
anatoly techtonik

Odpowiedzi:

28

Zwykle używasz do tego flagi -u. Ze strony man tar:

 -u, --update
       only append files newer than copy in archive

więc ta sekwencja zrobi to, czego potrzebujesz:

# First create the tar file. It has to be UNCOMPRESSED for -u to work
tar -cvf my.tar some-directory/
# ... update some files in some-directory
# ... add files in some-directory
# Now update only the changed and added files
tar -uvf my.tar some-directory/
# Compress if desired
gzip my.tar

Aby uzyskać nieco bardziej szczegółowy wygląd, zobacz tutaj: http://www.gnu.org/software/tar/manual/html_node/how-to-update.html

roadmr
źródło
2
OP poprosił o aktualizację skompresowanego archiwum, którego nie można zaktualizować.
QkiZ
18

Rozwiązanie / obejście

Nie można zaktualizować skompresowanego archiwum TAR ( .tar.gz ) w jednym kroku. Ale jeśli masz wystarczająco dużo wolnego miejsca, możesz to zrobić:

  1. Wyodrębnij plik .tar z pliku .tar.gz :

    gunzip filename.tar.gz

  2. Zaktualizuj nieskompresowany plik .tar za pomocą tar -upolecenia:

    tar -uf filename.tar new_file

  3. Skompresuj zaktualizowany plik .tar :

    gzip filename.tar

Przyśpieszyć

Jeśli masz procesor wielordzeniowy, zalecamy użycie pigzzamiast gzipdo wypakowywania i tworzenia plików .gz . ( pigzjest wielowątkową implementacją gzip)

Po prostu zamień gzip/ gunzippolecenia do pigz/ unpigz.

Powiązane instrukcje

andras.tim
źródło
5

Jeśli chcesz zaktualizować określony plik w *.tar.gzpliku, wykonaj następujące czynności:

Wprowadź, viskąd tarplik jest dostępny

/home>vi

Na przykład, jeśli chcesz zmodyfikować plik simple.tar.gz znajdujący się w /home/test/katalogu:

/home/test>vi

A w pustym edytorze wpisz :n simple.tar.gzi naciśnij Enter , a otrzymasz listę folderów i plików, przesuń kursor tam, gdzie chcesz zmodyfikować, i kliknij Enter. Pokaże viedytor określonego pliku. Następnie iopcja zmiany pliku. Po udanej zmianie. Naciśnij Escklawisz i wybierz, :wqaby zapisać i zamknąć plik. Następnie użyj, :qaby wyjść z listy plików.

priyanka
źródło
1

Jeśli zamierzasz to robić wielokrotnie, optymalizacja może być:

if [[ -f my.tar.gz ]]; then
    if [[ ! -f my.tar ]]; then
        echo 'No tar, unzipping tar.gz'
        gunzip my.tar.gz
    fi
    tar -uvf my.tar file1 file2 file_new
    gzip -fk my.tar  # This keeps a copy of the tar.
    # -f --force overwrite existing .tar.gz
    # -k --keep Keep the input file (.tar file)
else
    tar -cvzf my.tar.gz file1 file2
fi
Shubham Chaudhary
źródło