2016-05-09 2 views
0

Я хочу разархивировать файлы внутри папки и переименовать их с тем же именем, что и файл с исходным кодом .zip, но сохраняя исходное расширение отдельных файлов. Есть идеи, как это сделать?Распакуйте и переименуйте файлы, поддерживающие исходное расширение файла

Возпроизводимо пример:

# 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") 

То, что я имел в виду что-то наивным, как это:

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

В конце концов, эти файлы я бы в моей папке:

SE.zip 
AL.zip 

AL.shx 
AL.shp 
AL.prj 
AL.dbf 

SE.shx 
SE.shp 
SE.prj 
SE.dbf 
+0

Как вы хотите обрабатывать папки? Что произойдет, если два файла имеют одинаковое расширение? – Chris

+0

По существу, вам нужно сделать каждый zip-файл, сохранить имя zip без последних 4 символов (что вы можете сделать с 'substr'). Затем откройте zip, извлеките имя файла, возьмите расширение с регулярным выражением (как могут быть разные расширения) и вставьте это расширение в конец ранее сохраненного имени zip. Затем сохраните файл под этим именем и выражением. – giraffehere

ответ

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

Это работает с указанными именами файлов, но не обязательно может быть обобщено безопасно. Если следующий zip-файл, например ZZ.zip, содержит файл с тем же именем, что и ранее переименованный, скажем, AL.dbf, оригинал будет перезаписан. Более безопасный подход заключается в том, чтобы адаптировать этот ответ, чтобы распаковать его во временную папку, а затем переименовать и переместить. – dww

Смежные вопросы