Создать архив tar текущего каталога без предшествующего периода


10

Когда я делаю следующее:

tar czvf ../myarchive.tar.gz ./

Я получаю одну (раздражающую) корневую папку в моем архиве tar:

раздражающий

Как убрать этот ужасный период при создании архива?



3
Или используйте --transform/ --xform, как это было предложено Магнусом :tar -cf /path/to/output.tar -C /path/to/input-directory . --xform='s!^\./!!'
n.st

Ответы:


6

Вы не

name=${PWD##*/}
cd ..
tar czf "$name.tar.gz" "$name"

(Примечание: это не работает, если в вашей оболочке включено отслеживание символьных ссылок текущего каталога и доступ к текущему каталогу осуществляется через символическую ссылку.)

Да, это не то, что вы спросили, но это то, что вы должны сделать. Архивы, которые раскрывают много файлов в текущем каталоге, раздражают: на каждого человека, распаковывающего архив, ложится бремя создания целевого каталога для файла, и если они случайно распаковывают их в непустом каталоге, трудно убирать В большинстве случаев архив должен создавать один каталог верхнего уровня, имя которого является базовым именем архива.


Понял. Если я правильно помню, просто очень раздражает необходимость сделать дополнительный шаг, чтобы распаковать архив в определенную директорию (например, tar xzvf archive.tar.gz && mv archive/* /outputvs. unzip archive.zip -d /output)
Нафтули Кей

9

Точка появляется потому, что tarсоздает структуру пути так, как вы указываете в аргументах. Так как вы дали . В качестве источника архив также создается в той же структуре.

Вы можете попробовать это и проверить:

tar -czvf ../myarchive.tar.gz *

Обновление ответа с помощью комментария n.st

tar --xform s:'./':: -czvf ../myarchive.tar.gz ./

1
*Glob не будет соответствовать скрытые файлы.
n.st

: D эх .. просто новичок .. не понял.
начинающий

Вы можете использовать еще несколько глобусов bash для включения скрытых файлов - посмотрите здесь .
n.st

0

лучше добавить ^ перед предыдущим.

tar --xform s:'^./':: -czvf ../myarchive.tar.gz ./

ИЛИ все "/" в полном пути внутри архива будут удалены, если только "/" не является концом полного пути.


1
Пожалуйста, предложите изменить этот ответ вместо публикации отдельного ответа: unix.stackexchange.com/posts/144094/edit
muru
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.