Überschreibe vorhandene schreibgeschützte Dateien, wenn Pythons Tarfile verwendet wird

8

Ich versuche Pythons Tarfile-Modul zu verwenden, um ein tar.gz-Archiv zu extrahieren.

Ich möchte, dass die Extraktion alle vorhandenen Zieldateien überschreibt - das ist das normale Verhalten von tarfile.

Ich treffe jedoch einen Schnatz, indem einige der Dateien schreibgeschützt sind (z. B. chmod 550).

Die Operation tarfile.extractall() schlägt tatsächlich fehl:

%Vor%

Wenn ich versuche, die Dateien von der normalen Befehlszeile zu löschen, kann ich es tun, ich muss nur eine Eingabeaufforderung beantworten:

%Vor%

Das normale GNU-tar-Dienstprogramm behandelt diese Dateien auch mühelos - es überschreibt sie nur, wenn Sie extrahieren.

Mein Benutzer ist der Eigentümer der Dateien, daher wäre es nicht schwierig, die Zieldateien vor dem Ausführen von tarfile.extractall rekursiv zu chmodieren. Oder ich kann shutil.rmtree verwenden, um das Ziel vorher wegzublasen, was die Workaround ist, die ich jetzt benutze. Allerdings fühlt sich das etwas hackisch an.

Gibt es eine pythonischere Möglichkeit, schreibgeschützte Dateien in tarfile zu überschreiben, Ausnahmen oder etwas Ähnliches zu verwenden?

    
victorhooi 30.08.2011, 00:18
quelle

2 Antworten

6

Sie könnten die Mitglieder des Tarballs durchlaufen und Fehler für jede Datei extrahieren / behandeln:

In einer modernen Version von Python würde ich die with Anweisung verwenden:

%Vor%

Wenn Sie with nicht verwenden können, ersetzen Sie den with -Anweisungsblock durch:

%Vor%

Wenn dein Tar Ball gezippt ist, gibt es eine schnelle Abkürzung, um das mit nur zu behandeln:

%Vor%

Es wäre schöner, wenn tarfile.extractall eine Überschreiboption hätte.

    
stderr 30.08.2011, 00:49
quelle
1

Ich konnte Mike's Steder Code so funktionieren lassen:

%Vor%     
Tim Santeford 19.06.2012 17:49
quelle

Tags und Links