Как создать zip файл без цельной структуры каталогов

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

zip -r out.zip /foo/bar/

Я бы хотел, чтобы он переписывал через панель и добавлял все файлы с сохраненной структурой каталогов (что и делает). Однако я не хочу, чтобы "foo" был каталогом верхнего уровня в созданном zip файле. Я бы хотел, чтобы bar был каталогом верхнего уровня.

Есть ли простой способ сделать это? Я понимаю, что я могу сменить каталоги перед тем, как сделать zip, чтобы избежать проблемы, но я ищу решение, которое этого не требует.

Ответы

Ответ 1

Я не верю, что zip может исключить каталог верхнего уровня. Я думаю, ваш лучший выбор - сделать что-то вроде: pushd/foo; zip -r out.zip./bar; POPD;

Но это именно тот ответ, который вы сказали, что не хотите.

Ответ 2

Это должно сделать это:

cd /foo/bar/ 
zip -r ../out.zip *

Архив будет находиться в /foo/out.zip

Ответ 3

7z a -tzip out.zip -w foo/bar/.

Ответ 4

Если кто-то наткнется на это и не удовлетворен вышеуказанным решением, здесь следует очень простое обходное решение, чтобы не зашивать длинные подкаталоги. Он включает временное создание папки в C:/, а после прошивки просто ее удаления:

ZipFiles <- list.files(".../ZipFiles") # Insert your long subdirectory into .../

dir.create("C:/ZipFiles")
dir.create(".../FolderToBeZipped")
file.copy(from = ZipFiles,to = "C:/ZipFiles")
zip(".../FolderToBeZipped",
    files = "C:/ZipFiles")
unlink("C:/ZipFiles",recursive = TRUE)

В результате получается... /FolderToBeZipped.zip/ZipFiles/

Преимущество в том, что вам не нужно находиться внутри подкаталога (или проекта) при выполнении кода.