Есть ли какой-либо простой способ, извлекают все файлы из .tar.gz и переименовывают файлы после извлечения? Смолы внутри похожи:
file1.obj
file2.xr
file3.ty
file4.hjg
Все файлы являются различными расширениями, но я хочу, извлекают их и переименовывают их то же, таким образом, извлеченные файлы были бы
name.obj
name.xr
name.ty
name.hjg
Я знаю, что названия всех этих файлов и их расширения, являются постоянными для всех шаров tar. Я мог легко извлечь их и затем переименовать их после путем поиска их имени, но это будет тяжелой операцией, есть ли более легкий путь? Вот мой код сценария 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])
Это должно сделать задание:
$ tar -xzvf foo.tar && cd foo
$ for i in *; do echo $i |sed -re "s/[A-Za-z0-9]+(.*)/name\1/"; done
, Чтобы сделать это в вызов Python :
new_str = re.sub('[A-Za-z]+(.*)', r'\name\1', old_str);
Вот другой:
$ for i in *; do echo name.${i#*.}; done