Как создать ZIP-файл без всей структуры каталогов - PullRequest
16 голосов
/ 15 марта 2012

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

zip -r out.zip /foo/bar/

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

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

Ответы [ 4 ]

8 голосов
/ 12 апреля 2012

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

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

Архив будет в /foo/out.zip

8 голосов
/ 15 марта 2012

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

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

4 голосов
/ 12 декабря 2013

<a href="http://p7zip.sf.net/" rel="nofollow">7z</a> a -tzip out.zip -w foo/bar/.

0 голосов
/ 04 марта 2016

Если кто-то наткнулся на это и не удовлетворен вышеуказанным решением, здесь следует очень простой обходной путь, чтобы не архивировать длинные подкаталоги. Он включает временное создание папки в 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/

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

...