Jak wznowić polecenie tar, które zostało zabite

11

Robiłem: tar -cvfi musiałem to zabić ctrl-C. Wiem, że powinienem był to zrobić, Ctrl-Za potem przenieść zadanie na pierwszy plan ... ale to nie jest historia.

Czy mogę wznowić od momentu zatrzymania zadania?

mthpvg
źródło
Czy w lokalizacji docelowej jest niepełny plik tar?
Karthik T
Tak, jest niepełna smoła.
mthpvg

Odpowiedzi:

11

Ta metoda odtworzy archiwum tar i doda gotową część do istniejącego pliku. Może to być przydatne w przypadku tworzenia kopii zapasowej przez połączenie sieciowe. Prawdopodobnie spowoduje to uszkodzenie archiwum, jeśli jakiekolwiek dane w pliku INFILES uległy zmianie. Po zakończeniu sprawdź swoje archiwum.

Zmień INFILES i OUTFILE na prawidłowe nazwy w następnym wierszu.

INFILES="my folder"; OUTFILE="archive.tgz"; SIZE="$(wc -c < $OUTFILE)"; tar -cz --to-stdout "$INFILES" | tail -c +$(($SIZE+1)) >> "$OUTFILE"

Wyjaśnienie:

SIZE="$(wc -c < $OUTFILE)" # Pobierz aktualny rozmiar archiwum.

tar -cz --to-stdout "$INFILES" |# Rozpocznij tworzenie archiwum i wyślij dane wyjściowe do tailpolecenia.

tail -c +$(($SIZE+1)) >> # Zignoruj ​​dane przed $ SIZE + 1 i wznów resztę archiwum $ OUTFILE.

Rucent88
źródło
2
Zakładam, że jest to szybsze niż ponowne uruchomienie procesu tar, ponieważ w rzeczywistości nie zapisuje on niczego na dysku?
Tyler
2

Najlepszym rozwiązaniem byłoby usunięcie pliku tar i ponowne uruchomienie procesu poprzedzonego nohupi dołączonego do &. Alternatywnie możesz uruchomić tar -tfvi użyć tego jako wykluczenia dla nowego tar -cvf.

Mark Cohen
źródło
2
tar -cvfzastąpi istniejący plik. Miałeś na myśli tar -rvf? Ostatni plik, który został zapisany w archiwum, był prawdopodobnie niekompletny.
Gilles „SO- przestań być zły”
Pomysł polega więc na utworzeniu listy plików, które są już w archiwum, minus ostatni, który prawdopodobnie jest niekompletny. A potem uruchomić tar -rvf?
mthpvg
2

Nie możesz; po prostu musisz zacząć od nowa.

psusi
źródło
1

Co robię w przypadku, gdy mam niepełne tararchiwum, tworzę listę plików w archiwum:

tar tf archive.tar | sed -e '/\/$/d' -e x -e '/^$/d' >files-done

sedPolecenie usuwa wszystkie te linie, które mają ukośnik: Są to katalogi, a nie pliki i chcemy ponownie zrzucić katalogów i tylko pominąć te pliki w tych katalogach, że mamy już w pierwszym archiwum tar. Ponadto pozwalamy sedusunąć ostatnią nazwę pliku, ponieważ najprawdopodobniej została ona zrzucona tylko częściowo, więc zarchiwizujemy ją ponownie.

Następnie przekaż files-donelistę za pomocą opcji -X do nowego tarpolecenia:

tar cfvX archive2.tar files-done SOURCEDIR

Pamiętaj, aby użyć nowej nazwy pliku wyjściowego w nowym poleceniu tar, w przeciwnym razie zastąpisz częściowe archiwum. Nie próbuj dołączać bezpośrednio do uszkodzonego archiwum tar.

Kai Petzke
źródło