Как удалить один файл из архива tar.gz

У меня есть огромный архив tarbell с чрезмерно большим или поврежденным error_log, который заставляет архив зависать при попытке извлечь его. Есть ли способ удалить это из архива перед распаковкой или извлечением архива без извлечения этого конкретного файла на терминале Mac OS X?

Я нашел этот пост о том, как efficiently-remove-files-from-large-tgz, однако я попробовал флаг -delete, но получил эту ошибку:

tar: Option --delete is not supported

Есть ли способ:

  • удалить файл из архива без его разархивирования?
  • извлечь архив, но исключить файл?

Ответ 1

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

tar -zxvf file.tar.gz --exclude "file_to_exclude"

Ответ 2

Вы можете упаковать его так:

tar -czvf ./new.tar.gz --exclude='._*' @old.tar.gz

Я использовал ._* чтобы удалить все ._files, но вы можете использовать любой шаблон, который вам нравится, включая полный путь, каталог, имя файла или что угодно.

Ответ 3

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

команда: - rm -rf имя файла архива r: - рекурсивно