Есть ли способ заархивировать файл, включив в него абсолютные пути в Linux через командную строку?
У меня есть программа на Python, которая проверяет zip- и tar-файлы на наличие абсолютных путей, и я хотел бы создать zip-файл, чтобы проверить, работает ли эта функция.
Мне удалось успешно сделать это с помощью tar. Я также долго и широко гуглил ответ на этот вопрос и проверил документацию и руководство по zip, но так и не нашел четкого ответа.
решение1
$> zip file.zip $PWD/test.txt
adding: path/to/test.txt (deflated 5%)
$> unzip -l file.zip
Archive: file.zip
Length Date Time Name
--------- ---------- ----- ----
20 03-11-2019 21:32 path/to/test.txt
--------- -------
20 1 file
Для этого также имеется переключатель:
$> zip -jj file.zip test.txt
adding: test.txt (deflated 5%)
$> unzip -l file.zip
Archive: file.zip
Length Date Time Name
--------- ---------- ----- ----
20 03-11-2019 21:32 path/to/test.txt
--------- -------
20 1 files
Это даст вам точно такой же результат, но если вы используете его в самом начале, /
то вы на самом деле не сможете этого сделать, но вы можете указать это при распаковке с помощью -d
параметра.
Да! Это правка, мне пришло в голову, может быть, вы говорите о gz, xz, bzip2? Если так, вам нужно сначала заархивировать их, у них нет концепции файловой системы, как у tar. zip, rar, 7z, все они делают что-то подобное.
решение2
В формате файла ZIP пути к файлам всегда относительны, см., например,этот:
file name: (Variable) The name of the file, with optional relative path. The path stored should not contain a drive or device letter, or a leading slash. All slashes should be forward slashes '/' as opposed to backwards slashes '\' for compatibility with Amiga and Unix file systems etc.
Конечно, можно исправить ZIP-файл, принудительно добавив в него начальный слеш, но все обычные приложения обычно защищены от таких очевидных взломов(*).
(*) еще более раздражающий хак — файл почти бесконечной длины, состоящий из последовательных нулей, которые кодируются в горстке байтов. Распаковка этого часто выводит из строя ваш компьютер. Все утилиты обработки ZIP теперь это обнаружат.