Переименовать имя каталога, прежде чем tar произойдет - PullRequest
33 голосов
/ 16 марта 2012

У меня есть каталог, например /var/tmp/my-dir/, который я часто сжимаю с помощью следующей команды:

$ cd /var/tmp/
$ tar -zcf my-dir.tar.gz my-dir/*

Позже, когда я распакую my-dir.tar.gz , он создаст my-dir/ в текущем каталоге. Похоже, каталог my-dir «обернут» внутри архива. Есть ли у tar возможность переименовать my-dir, например, в. your-dir до происходит фактическое тарирование. Так что ...

$ tar -zxf my-dir.tar.gz
# So that ... this creates your-dir/, instead of my-dir/

Спасибо.

Ответы [ 2 ]

58 голосов
/ 16 марта 2012

Который tar?

GNU Tar принимает аргумент --transform, которому вы задаете выражение sed для управления именами файлов.

Например, чтобы переименовать во время распаковки:

tar -zxf my-dir.tar.gz --transform s/my-dir/your-dir/

BSD tar и S tar аналогично имеют аргумент -s, принимающий простое /old/new/ (не общее sed выражение).

7 голосов
/ 25 июля 2017

Для Mac работает -s флаг.

Переименовать в компресс:

tar -zcf my-dir.tar.gz -s /^my-dir/your-dir/ my-dir/*

Переименовать по экстракту:

tar -zxf my-dir.tar.gz -s /^my-dir/your-dir/

...