Следующая проблема для меня:
Есть архив 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 /".