Extraia todos os arquivos de um .tar.gz após o wget e renomeie-os

1

Existe alguma maneira fácil de extrair todos os arquivos de um .tar.gz e renomear os arquivos após a extração? Os tars dentro parecem:

file1.obj
file2.xr
file3.ty
file4.hjg

Todos os arquivos são extensões diferentes, mas eu quero extraí-los e renomeá-los da mesma forma, para que os arquivos extraídos sejam

name.obj
name.xr
name.ty
name.hjg

Eu sei que os nomes de todos esses arquivos e suas extensões são constantes para todas as bolas de alcatrão. Eu poderia facilmente extraí-los e, em seguida, renomeá-los, procurando por seu nome, mas isso seria uma operação pesada, há uma maneira mais fácil? Aqui está o meu código de script python

# GRAB DATES
#   range : 2010 - 2011
start_date = datetime(2010, 01, 01)
end_date = datetime(2011, 12, 31)

for date in daterange(start_date, end_date):
    file_append = static_path + "%04d" % date.year + "%02d" % date.month + "%02d" % date.day + ".tar.gz" 
    file_out = "%04d" % date.year + "%02d" % date.month + "%02d" % date.day

    # get tarball from site
    proc_wget = "wget -nd -O " + "%04d" % date.year + "/" + file_out + \
            ".tar.gz" + " http://water.weather.gov/precip/p_download_new/" + \
            "%04d" % date.year + "/" + "%02d" % date.month + "/" + \
            "%02d" % date.day + "/" + file_append

    # name of tarball is file_out + ".tar.gz" 
    # all files inside tarbal are static_name.*
    # so they all have the same name but different extensions
    extract = ["7z e " + file_out + ".tar.gz", 
               "7z x " + file_out + ".tar -o" ]
    os.system(proc_wget)
    os.system(extract[0])
    os.system(extract[1])
    
por Need4Sleep 12.06.2015 / 21:32

1 resposta

1

Isso deve fazer o trabalho:

$ tar -xzvf foo.tar && cd foo
$ for i in *; do echo $i |sed -re "s/[A-Za-z0-9]+(.*)/name/"; done

Para fazer isso na chamada Python :

new_str = re.sub('[A-Za-z]+(.*)', r'\name', old_str);

Aqui está outro:

$ for i in *; do echo name.${i#*.}; done
    
por ps95 12.06.2015 / 22:26