Поместите tar'd файлы в подкаталог

8

У меня есть настройки каталога, как показано ниже:

folder_x
file.y
file.z

Я хотел бы создать файл tar, чтобы при его извлечении структура выглядела примерно так:

dir_q/folder_x
dir_q/file.y
dir_q/file.z

Как я могу заставить это работать с помощью tar? Для справки, текущая команда, которую я использую:

tar -czf archive.tar.gz file.y file.z folder_x

источник

Ответы:

9

Я никогда не использовал опцию --transform, но я понял, что она сделает то, что вам нужно:

tar -czf archive.tar.gz --transform 's,^,dir_q/,' file.y file.z folder_x

Реализуйте использование ,вместо в /качестве разделителя, чтобы мы могли добавить косую черту.

Марникс А. ван Аммерс
источник
Хм, похоже, он делает это неправильно: file.z-> dirfile.zи dirfolder_x. Я тоже поиграю с регулярным выражением, посмотрю, смогу ли я получить его так, как я хочу.
1
Вот как я это делаю: tar -czf archive.tar.gz --transform 's, ^, dir_q /,' file.y file.z folder_x Sed позволяет вместо / избежать двусмысленности, когда в вашем выражении есть косые черты. , Обычно я бы сказал, что вы можете избежать косой черты с помощью обратной косой черты, но sed (по крайней мере, gnu sed) интерпретирует ее неправильно.
JDB
tar --transform не работает на MacOS
Александр Миллс
В MacOS вы можете установить macports и gnutar, чтобы получить опцию --transform. Или загрузите и скомпилируйте gnutar самостоятельно.
Марникс А. ван Аммерс
1

Если вы не против создания нового каталога ...

mkdir dir_q; tar -C $ _ -xzvf archive.tar.gz

альтернативно, создайте новый каталог, распакуйте файл в этот каталог, затем повторно скопируйте его из родительского каталога, чтобы включить его имя в извлеченную версию. Таким образом, вы не должны помнить какой-то супер длинный вызов.

Джон Т
источник