2015-08-13 27 views
5

Sto scrivendo uno script Python in cui ho bisogno di chiamare 7z per estrarre alcuni file conservati in una directory in un archivio senza estrarre l'archivio completo. L'archivio contiene più directory e ho bisogno di estrarre alcuni file da una particolare directory.Riga di comando per 7z per estrarre file specifici da cartelle specifiche all'interno di un archivio

Diciamo che "abc.7z" è un archivio che contiene più directory, cioè "temp", "windows", "system", "data". Voglio estrarre alcuni file .exe dalla directory "system" solo perché quei file .exe potrebbero essere presenti anche in altre directory, ma sono interessato solo ai file da "system".

Tutto ciò di cui ho bisogno è il comando 7z; Scoprirò come chiamare 7z dalla sceneggiatura. Grazie per l'aiuto.

risposta

14

È possibile specificare un filtro file/cartella alla fine della riga di comando. Controllare this per ulteriori dettagli sui comandi e le opzioni della riga di comando 7zip.

7z.exe x [archive.7z] -o[output_dir] [filter] 

ad es. 7z.exe x abc.7z -aoa -oC:\Temp system

È inoltre possibile specificare i file di un tipo particolare dalla cartella di sistema. Ad es. system\*.exe estrae tutti i file .exe all'interno della directory system.

-aoa l'opzione è per la modalità di sovrascrittura.

Per chiamarlo da Python è possibile utilizzare il modulo subprocess. Qualcosa di simile:

import subprocess 

cmd = [] 
cmd.append(r'C:\Program Files\7-Zip\7z.exe') 
cmd.append('x') 
cmd.append(archive) 
cmd.append('-aoa') 
cmd.append('-o{}'.format(dst_part)) 
cmd.append(file_folder_filter) 
subprocess.call(cmd) 
+0

Quindi significa che '7z.exe x abc.7z -aoa -oC: \ Temp system \ *. Exe' sarà il comando finale per estrarre solo l'exe. file per m la cartella di sistema. –

1

Procedura per estrarre una directory specifica da 7z zip:

specifico repertorio: rootdir/firstson/secondo

Zip File: test.7z

Comando da utilizzare: 7z x test.7z rootdir/firstson/second