Самый простой способ решить его использование grep
только, должен передать еще одно инвертированное по каналу grep
в конце. Например:
grep -A 4 "The mail system" temp.txt | grep -v "The mail system" | grep -v '^\d*$'
Измените INFILES и OUTFILE на правильные имена в следующей строке.
Объяснение:
SIZE="$(wc -c < $OUTFILE)"[112898] # Получите текущий размер архива.
tar -cz -в-выход "$INFILES". |[112900] # Начать создание архива и отправить вывод команде [112901]tail[112902].
Лучшее решение состояло бы в том, чтобы удалить файл tar и перезапустить процесс, предварительно ожидаемый с nohup
и добавленный с &
. С другой стороны, Вы могли работать tar -tfv
и используйте это в качестве исключения для нового tar -cvf
.
tar -cvf
перезапишет существующий файл. Вы имели в виду tar -rvf
? Кроме того, последний файл, который был записан в архив, был, вероятно, неполным. строки
– Gilles 'SO- stop being evil'
07.12.2012, 01:04
tar -rvf
?
– mthpvg
07.12.2012, 12:42
Что делать в случае, если у меня неполный 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-архиву.