извлечение tar в каталог с тем же базовым именем?

Существует шаблон, который позволяет, Вы для использования snmp для контроля использования proc кактусы можете передать его по каналу как график..

http://forums.cacti.net/about19640.html

18
23.04.2015, 19:09
5 ответов

с помощью gnu tar можно использовать --xform (или --transform) для префиксации /prefix/ к имени каждого файла:

tar -xf myArchive.tar.gz --xform='s|^|myArchive/|S'

обратите внимание, что в префиксе / нет ведущей /, а выражение sed заканчивается на S, чтобы исключить символические цели связи из преобразования имени файла.
Чтобы проверить его (dry-run):

tar -tf myArchive.tar.gz --xform='s|^|myArchive/|S' --verbose --show-transformed-names

Чтобы начать, вот очень простой сценарий, который можно вызвать как извлечь :

STRIP=${1%.*}                                #strip last suffix
NAME=${STRIP%.tar}                           #strip .tar suffix, if present
tar -xf "$1" --xform="s|^|$NAME/|S"          #run command
10
27.01.2020, 19:46

Еще одно возможное решение использует - Опция - Опция :

tar -xzf ARCHIVE_NAME.tgz --transform="s/OLD_DIR_NAME/ARCHIVE_NAME/"

с вашими файлами:

tar -xzf myArchive123.tar.gz --transform="s/helloWorld/myArchive123/"
2
27.01.2020, 19:46

Редактировать

Принятый ответ ниже, чем ниже. (Делайте то же самое, но короче обычно лучше).


Я в конечном итоге взломал себя скриптом для задачи под рукой. Это работает с .tar .tar.gz и .gz

#!/bin/sh
#usage:
# nameOfScript myArchive.tar.gz
# nameOfScript myArchive.gz
# nameOfScript myArchive.tar
#
# Result:
# myArchive   //folder
fileName="${1%.*}" #extracted filename

#handle the case of archive.tar.gz
trailingExtension="${fileName##*.}"
if [ "$trailingExtension" == "tar" ]  
then
    fileName="${fileName%.*}"  #remove trailing  tar.
fi

mkdir "$fileName"
tar -xf "$1" --strip-components=0 -C "$fileName"

Использование:

   nameOfScript archive.tar.gz 
   ls 
    archive
   cd archive 
   ls 
    <archive content>

Примечание. Это решение способно к точкам в имени файла. E.G ECLIPSE-4.5M-SDK.TAR.GZ.

Я держу сценарий в моем Git Repo. Для последней версии см.: https://github.com/leoufimtsev/ldts/blob/master/Pathscripts/leo-Tar-hothhere

3
27.01.2020, 19:46

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

mkdir <archive name>
tar -xf <archive name>.tar.gz --strip-components=1 -C <archive name>

, то задача была бы решена, хотя, возможно, еще есть более компактный ответ.

7
27.01.2020, 19:46
$ tar -xf myArchive123.tar.gz --one-top-level

--один -верхний -уровень [=DIR]
Извлеките все файлы в DIR или, если используется без аргумента, в подкаталог, названный по базовому имени архива (за вычетом стандартных суффиксов сжатия, распознаваемых с помощью --auto -сжатие ).

2
11.02.2021, 06:12

Теги

Похожие вопросы