gunzip и создавать каталоги, следующие за именем zip-файла

У меня есть следующий файл gzip: hdf5-1.8.18.tar.gz . Когда я разархивирую файл со следующей командой:

 gunzip < hdf5-1.8.18.tar.gz | tar xf - 

Он распаковывается в созданный следующий каталог: hdf5-1.8.18 . Этот каталог не очень удобен для использования причины «-», поэтому я изменил имя каталога с помощью следующей команды:

 mv hdf5-1.8.18 hdf5 

Но, используя эту команду, я потерял информацию о версии 1.8.18. Поэтому я могу сделать уродливое обходное решение вроде:

 mkdir hdf5 mv hdf5-1.8.18 hdf5/1.8.18 

Я нахожу это решение тихим уродством, поэтому я хотел бы знать, нет ли более прямого способа сделать это. Спасибо!

  • Перемещение файла внутри той же файловой системы
  • Работа с пробелами переменных для `mv`
  • Повреждение файлов с использованием rsync, нескольких процессов rsync, перемещение / переименование исходного файла
  • Как обрезать имя файла из нескольких файлов в папке
  • Получить все имена файлов с определенным количеством символов
  • Как вы можете перемещать файл в качестве фонового задания и удалять все остальные файлы и каталог перед ожиданием завершения задания?
  • Список (или перемещение) только файлов с определенным количеством строк?
  • Как вы перемещаете все файлы (включая скрытые) из одного каталога в другой?
  • 2 Solutions collect form web for “gunzip и создавать каталоги, следующие за именем zip-файла”

    Возможно, вы захотите взглянуть на параметр -C tar .

     tar zxf hdf5-1.8.18.tar.gz -C hdf 

    будет распаковывать, распаковывать и размещать каталог в hdf/ diretory.

    Прежде всего, было бы проще, если бы вы немного переформулировали свой вопрос. Чувствует себя легко решаемым с помощью какого-то скрипта. Следующее должно работать в скрипте BASH. Запустите его с именем файла в качестве первого аргумента. Например, «./change_name_script.sh hdf5-1.8.18.tar.gz», и он будет работать так, как вы хотите.

     #!/bin/bash filename=$1 gunzip < $filename | tar xf - move_filename=$(echo $filename | sed -r 's/.tar.gz$//') first_part=$(echo "$move_filename" | sed -r 's/-.*$//') second_part=$(echo "$move_filename" | sed -r 's/^.*-//') mkdir $first_part mv $move_filename $first_part/$second_part 
    Linux и Unix - лучшая ОС в мире.