2016-05-09 5 views
0

Ich möchte die Dateien in einem Ordner entpacken und benennen sie mit dem gleichen Namen wie ihre .zip Ursprungsdatei, aber behalten die ursprüngliche Erweiterung der einzelnen Dateien. Irgendwelche Ideen, wie man das macht?Entpacken und umbenennen von Dateien unter Beibehaltung der ursprünglichen Dateierweiterung

Reproduzierbare Beispiel:

# Download zip files 
    ftppath1 <- "ftp://geoftp.ibge.gov.br/malhas_digitais/censo_2010/setores_censitarios/se/se_setores_censitarios.zip" 
    ftppath2 <- "ftp://geoftp.ibge.gov.br/malhas_digitais/censo_2010/setores_censitarios/al/al_setores_censitarios.zip" 
    download.file(ftppath1, "SE.zip", mode="wb") 
    download.file(ftppath2, "AL.zip", mode="wb") 

Was ich im Sinn hatte, etwas so naiv, wie das war:

# unzip and rename files 
    unzip("SE.zip", file_name= paste0("SE",.originalextension)) 
    unzip("AL.zip", file_name= paste0("AL",.originalextension)) 

Am Ende, das sind die Dateien, die ich in meinem Ordner haben würde:

+0

Wie möchten Sie Ordner behandeln? Was passiert, wenn zwei Dateien dieselbe Erweiterung haben? – Chris

+0

Im Wesentlichen müssen Sie jede Zip-Datei nehmen und den Namen der Zip ohne die letzten 4 Zeichen speichern (was Sie mit 'substr' machen können). Öffnen Sie dann die Zip-Datei, extrahieren Sie den Namen der Datei, greifen Sie auf die Erweiterung mit einem regulären Ausdruck zu (da verschiedene Erweiterungen vorhanden sein können) und fügen Sie diese Erweiterung am Ende des Zip-Namens ein, den Sie zuvor gespeichert haben. Speichern Sie dann die Datei unter diesem Namen und Ausdruck. – giraffehere

Antwort

1
for (stem in c('SE','AL')) { 
    zf <- paste0(stem,'.zip'); ## derive zip file name 
    unzip(zf); ## extract all compressed files 
    files <- unzip(zf,list=T)$Name; ## get their orig names 
    for (file in files) file.rename(file,paste0(stem,'.',sub('.*\\.','',file))); ## rename 
}; 
system('ls;'); 
## AL.dbf AL.prj AL.shp AL.shx AL.zip SE.dbf SE.prj SE.shp SE.shx SE.zip 
+0

Dies funktioniert mit den angegebenen Beispieldateinamen, die jedoch nicht unbedingt sicher verallgemeinert werden können. Wenn eine nachfolgende Zip-Datei, z. B. ZZ.zip, eine Datei mit dem gleichen Namen enthält wie eine zuvor umbenannte Datei, z. B. AL.dbf, wird das Original überschrieben. Safer Ansatz wäre, diese Antwort anzupassen, um in temporäre Ordner entpacken, dann umbenennen und verschieben. – dww