2016-05-09 6 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

どのようにフォルダを扱いますか? 2つのファイルの拡張子が同じ場合はどうなりますか? – Chris

+0

あなたがする必要があることは、各zipファイルをとり、最後の4文字を使わないでzipの名前を保存することです(これは '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

関連する問題