Извлечь файл из TARBall в архив с консоли - PullRequest
0 голосов
/ 29 апреля 2020

Следующая проблема для меня:

Есть архив TAR, который мне пришлось на некоторое время скомпилировать с file-roller в качестве подпрограммы сценария с помощью команды file-roller. Теперь мне пришлось изменить свой сценарий, чтобы он стал более «техническим» и кроссплатформенным, ссылаясь непосредственно на команду TAR: для этого я просто cd указал каталог c и использовал эту команду:

tar -cvzf "path/to/archive.tar.gz" "." > /dev/null 2>&1

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

archive.tar.gz
-> ./
   -> file1.ext
   -> file2.ext

Мне удалось использовать опцию --transform, чтобы вернуть файлы в папку root архива следующим образом:

tar -cvzf "path/to/archive.tar.gz" --transform "s,.,," "." > /dev/null 2>&1

Результат Правильно организованный архив с файлами, перемещенными в папку root:

archive.tar.gz
-> file1.ext
-> file2.ext

Исходящий архив, читаемый file-roller, но с нарушенной функциональностью при извлечении файлов tar:

tar -x -f "path/to/archive.tar" -C "$TEMP_DIR/" file1.ext

TAR должен немедленно сообщить: нет такого файла или каталога в архиве или подобном.

tar -x -f "path/to/archive.tar" -C "$TEMP_DIR/"

Все еще работает нормально и извлекает все файлы из архива в "$ TEMP_DIR /".

1 Ответ

0 голосов
/ 29 апреля 2020

Вам нужно избавиться от первой точки и слэ sh:

tar -cvzf "path/to/archive.tar.gz" --transform "s,./,," "." > /dev/null 2>&1

Или вы можете просто сделать (если у вас нет скрытых файлов)

tar -cvzf "path/to/archive.tar.gz" * > /dev/null 2>&1

Для извлечения вы можете запустить непосредственно на tar.gz:

tar zxf "path/to/archive.tar.gz" -C "$TEMP_DIR/" tarred-file.ext
...