Я делал: tar -cvf
и мне пришлось убить его ctrl-C
. Я знаю, что должен был сделать, Ctrl-Z
а затем вернуть задачу на передний план ... но это не история.
Могу ли я возобновить с того момента, когда остановил задачу?
Я делал: tar -cvf
и мне пришлось убить его ctrl-C
. Я знаю, что должен был сделать, Ctrl-Z
а затем вернуть задачу на передний план ... но это не история.
Могу ли я возобновить с того момента, когда остановил задачу?
Ответы:
Этот метод восстановит ваш архив 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.
Лучшим решением будет удалить файл tar и перезапустить процесс с добавлением nohup
и добавлением &
. Кроме того, вы можете запустить tar -tfv
и использовать это как исключение для нового tar -cvf
.
tar -cvf
перезапишет существующий файл. Вы имели в виду tar -rvf
? Кроме того, последний файл, который был записан в архив, вероятно, был неполным.
tar -rvf
?
Что я делаю в том случае, если у меня есть неполный 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.