Robiłem: tar -cvf
i musiałem to zabić ctrl-C
. Wiem, że powinienem był to zrobić, Ctrl-Z
a potem przenieść zadanie na pierwszy plan ... ale to nie jest historia.
Czy mogę wznowić od momentu zatrzymania zadania?
Robiłem: tar -cvf
i musiałem to zabić ctrl-C
. Wiem, że powinienem był to zrobić, Ctrl-Z
a potem przenieść zadanie na pierwszy plan ... ale to nie jest historia.
Czy mogę wznowić od momentu zatrzymania zadania?
Odpowiedzi:
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 tail
polecenia.
tail -c +$(($SIZE+1)) >>
# Zignoruj dane przed $ SIZE + 1 i wznów resztę archiwum $ OUTFILE.
Najlepszym rozwiązaniem byłoby usunięcie pliku tar i ponowne uruchomienie procesu poprzedzonego nohup
i dołączonego do &
. Alternatywnie możesz uruchomić tar -tfv
i użyć tego jako wykluczenia dla nowego tar -cvf
.
tar -cvf
zastąpi istniejący plik. Miałeś na myśli tar -rvf
? Ostatni plik, który został zapisany w archiwum, był prawdopodobnie niekompletny.
tar -rvf
?
Co robię w przypadku, gdy mam niepełne tar
archiwum, tworzę listę plików w archiwum:
tar tf archive.tar | sed -e '/\/$/d' -e x -e '/^$/d' >files-done
sed
Polecenie 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 sed
usunąć ostatnią nazwę pliku, ponieważ najprawdopodobniej została ona zrzucona tylko częściowo, więc zarchiwizujemy ją ponownie.
Następnie przekaż files-done
listę za pomocą opcji -X do nowego tar
polecenia:
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.