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
  • Как переместить подкаталоги в другой подкаталог в одном каталоге?
  • Я случайно скопировал часть каталога / * to / some /, как мне исправить мою ошибку?
  • Линейные системные файлы перемещены, как вернуться при загрузке с установщика?
  • Перемещение определенных файлов в новое место (и добавление времени datettime)
  • Найти и переместить с исключением
  • 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 
    Interesting Posts
    Linux и Unix - лучшая ОС в мире.