Я пытаюсь использовать модуль tarfile Python для извлечения архива tar.gz.
Я бы хотел, чтобы при извлечении были перезаписаны все целевые файлы, если они уже существуют - это нормальное поведение tarfile.*
Тем не менее, я пытаюсь уловить, что некоторые файлы имеют защиту от записи (например, chmod 550).
Операция tarfile.extractall()
фактически не выполняется:
IOError: [Errno 13] Permission denied '/foo/bar/file'
Если я пытаюсь удалить файлы из обычной командной строки, я могу это сделать, мне просто нужно ответить на приглашение:
$ rm <filename>
rm: <filename>: override protection 550 (yes/no)? yes
Обычная утилита GNU tar также легко обрабатывает эти файлы - онапросто перезаписывает их при извлечении.
Мой пользователь является владельцем файлов, поэтому не составит труда рекурсивно изменить целевые файлы перед запуском tarfile.extractall.Или я могу использовать shutil.rmtree, чтобы забить цель заранее, это обходной путь, который я использую сейчас ... Однако, это выглядит немного хакерским.
Есть ли более Pythonic способ перезаписи ручного чтения -только файлы в tarfile, использующие исключения или что-то подобное?