У меня есть файл в архиве, как myArchive123.tar.gz
. Внутри находится папкаhelloWorld
Если я извлекаю это: tar -xf myArchive123.tar.gz
я получаю helloWorld
папку:
ls
myArchive123.tar.gz
helloWorld
Я хотел бы, чтобы выходные данные имели то же имя, что и имя файла, за исключением расширения .tar.gz. То есть:
tar <magic paramaters> myArchive123.tar.gz
ls
myArchive123.tar.gz
myArchive123
cd myArchive123
ls
helloWorld
Можно ли это сделать?
- Я никогда не знаю, что внутри архива. Может быть папкой, может быть много файлов.
- Я мог бы использовать другой инструмент, если tar не может этого сделать.
- Я был бы в порядке с более длинной формой, которую можно превратить в скрипт
РЕДАКТИРОВАТЬ
В то же время я взломал себе сценарий, который, кажется, выполняет свою работу. (см. мой опубликованный ответ ниже). Если это может быть улучшено, пожалуйста, не стесняйтесь оставлять комментарии / дополнительные ответы. Главное, чтобы он был упакован в одну строку вроде:
extract <file>
Ответы:
С помощью
gnu tar
вы можете использовать--xform
(или--transform
) для добавления/prefix/
к каждому имени файла:Обратите внимание , там нет ведущей
/
вprefix/
иsed
выражении концов с ,S
чтобы исключить символические цели ссылки из преобразований имен файлов.Чтобы проверить это (всухую):
Для начала, вот очень упрощенный скрипт, который вы можете использовать как
extract <file>
:источник
Ну, вы можете сделать это, по крайней мере, за пару шагов. Если вы сделали
это решило бы задачу, хотя, возможно, есть более компактный ответ.
источник
редактировать
Принятый ответ короче, чем ниже. (сделать то же самое, но обычно лучше чем короче).
В конце концов я взломал сценарий для выполнения поставленной задачи. это работает с .tar .tar.gz и .gz
Использование:
Обратите внимание, что это решение может содержать точки в имени файла. Например, Eclipse-4.5M-SDK.tar.gz.
Я держу скрипт в моем git-репо. Последнюю версию см. На странице https://github.com/LeoUfimtsev/ldts/blob/master/pathscripts/leo-tar-here.
источник
Еще одним возможным решением является использование
--transform
опции:С вашими файлами:
источник
--strip-components=0
просто удаляет первое имя каталога из пути и с-C
опцией сохраняет деархивированные файлы в новый каталог.