12

В настоящее время я делаю в сценарии очень неэффективно:

cp -a $MYPATH /tmp/$VERSION
cd /tmp
tar cjf archive.tar.bz2 $VERSION

Я хочу, чтобы все находилось в каталоге с именем $ VERSION - есть ли способ сделать это без необходимости копировать все, как в приведенном выше сценарии?

3 ответа3

21

GNU-версия tar поддерживает параметр --transform (и его псевдоним --xform), вы можете использовать его следующим образом

tar --transform "s/^$MYPATH/$VERSION/" -cf archive.tar.bz2 "$MYPATH"

Например, учитывая это дерево каталогов

foo
└── foo.txt

команда

tar --transform "s/^foo/bar/" -cf foo.tar.bz2 foo

создаст архив как

$ tar -tf foo.tar.bz2
bar/
bar/foo.txt
13

Чтобы сменить текущий каталог и добавить префикс, это сработало для меня:

tar --transform 's,^\.,$VERSION,' -cf foo.tar .
0

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

ln -s $MYPATH /tmp/$VERSION
cd /tmp
tar cjhf archive.tar.bz2 $VERSION

Опция h означает разыменование символических ссылок, то есть включает файл или каталог, на который указывает ссылка, а не просто записывает факт наличия символической ссылки и на что она указала.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .