Как мне возобновить команду tar, которая была убита

11

Я делал: tar -cvfи мне пришлось убить его ctrl-C. Я знаю, что должен был сделать, Ctrl-Zа затем вернуть задачу на передний план ... но это не история.

Могу ли я возобновить с того момента, когда остановил задачу?

mthpvg
источник
Есть ли неполный файл tar в месте назначения?
Картик Т
Да, есть неполная смола.
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.

Rucent88
источник
2
Я предполагаю, что это быстрее, чем просто перезапустить процесс tar, потому что он на самом деле ничего не записывает на диск?
Тайлер
2

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

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

Вы не можете; вам просто нужно начать все сначала.

psusi
источник
0

Что я делаю в том случае, если у меня есть неполный tarархив, я создаю список файлов в архиве:

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

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

Затем просто передайте files-doneсписок с помощью опции -X новой tarкоманде:

tar cfvX archive2.tar files-done SOURCEDIR

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

Кай Петцке
источник