Як відновити команду смоли, яка була вбита


11

Я робив таке: tar -cvfі мені довелося вбити його ctrl-C. Я знаю, що я повинен був би зробити, Ctrl-Zа потім повернути завдання на перший план ... але це не історія.

Чи можу я відновитись з того моменту, коли я зупинив завдання?


Чи є неповний файл tar на місці призначення?
Karthik T

Так, є неповна смола.
mthpvg

Відповіді:


11

Цей метод відтворить ваш архів tar і додасть готову частину до існуючого файлу. Це може бути корисно, якщо ви створюєте резервну копію через мережеве з'єднання. Ви, ймовірно, призведе до пошкодження архіву, якщо будь-які дані у ваших INFILES були змінені. Обов’язково протестуйте свій архів після завершення.

Змініть INFILES та OUTFILE на правильні імена у наступному рядку.

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

Пояснення:

SIZE="$(wc -c < $OUTFILE)" # Отримати поточний розмір архіву.

tar -cz --to-stdout "$INFILES" |# Почніть створювати архів і надсилайте висновок tailкоманді.

tail -c +$(($SIZE+1)) >> # Ігноруйте дані перед $ SIZE + 1 і відновіть решту архіву $ OUTFILE.


2
Я припускаю, що це швидше, ніж просто перезапустити процес tar, оскільки він насправді нічого не записує на диск?
Тайлер

2

Найкращим рішенням буде видалити файл tar та перезапустити процес, який був попередньо доданий nohupта доданий &. Можна також запустити tar -tfvта використовувати це як виключення для нового tar -cvf.


2
tar -cvfзамінить існуючий файл. Ви мали на увазі tar -rvf? Крім того, останній файл, який було записано в архів, ймовірно, був неповним.
Жил "ТАК - перестань бути злим"

Отже, ідея полягає в тому, щоб скласти список файлів, які вже є в тарболі, мінус останній, який, ймовірно, неповний. А потім запустити tar -rvf?
mthpvg


1

Що я роблю у випадку, якщо у мене є неповний tarархів, я створюю список файлів в архіві:

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

sedКоманда видаляє всі ті рядки, які мають слеш: Ці каталоги, а не файл, і ми хочемо , щоб скинути каталоги знову і тільки пропустити ці файли в цих каталогах, що ми вже в першому архіві дьогтю. Крім того, ми дозволяємо sedвидалити прізвище останнього файлу, оскільки це, швидше за все, було скинуто лише частково, тому ми будемо архівувати його ще раз.

Потім просто переведіть files-doneсписок через опцію -X до нової tarкоманди:

tar cfvX archive2.tar files-done SOURCEDIR

Не забудьте використати інше вихідне ім'я файлу для нової команди tar, інакше ви перезапишете ваш частковий архів. Не намагайтеся безпосередньо додавати до корумпованого архіву дьогтю.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.