89

Я пытаюсь заархивировать каталог (в Unix через SSH), но мне нужно исключить пару подкаталогов (и все файлы и каталоги внутри них).

Пока у меня есть это:

zip -r myarchive.zip dir1 -x dir1/ignoreDir/**/* 

Это, кажется, не работает, хотя.

Я тоже пробовал

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/* dir1/ignoreDir2/*

Однако это будет по-прежнему включать подкаталоги в ignoreDir1 и ignoreDir2.

Структура подкаталогов в каталогах, которые я хочу исключить, довольно существенна, поэтому я не могу просто добавить каждый каталог в аргумент -x.

Кто-нибудь знает как это сделать?

7 ответов7

102

Я был так близко!

Фактическая команда мне нужна:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/**\* dir1/ignoreDir2/**\*
59

Для моей конкретной системы, чтобы исключить каталог, я должен был заключать в кавычки мои исключенные каталоги, и это работало как прелесть:

zip -r myarchive.zip dir1 -x "dir1/ignoreDir1/*" "dir1/ignoreDir2/*"

Заметки:

- это исключает как каталог для исключения, так и все файлы внутри него.

- Вы должны использовать полный путь к каталогам, которые хотите исключить!

6

Следующее сделает

zip -r myarchive.zip dir1 -x dir1/ignoreDir1\* dir1/ignoreDir2\*

Для чего тебе было ** , @sulman?

Это работает как очарование для меня следующим образом:

[root@ip-00-000-000-000 dir1]# ls -lrt dir1/ 
total 16
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir1
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir2
drwxr-xr-x 2 root root 4096 Oct 31 07:39 dir3
-rw-r--r-- 1 root root    8 Oct 31 07:39 test.txt

[root@ip-00-000-000-000 temp]# zip -r dir1.zip dir1 -x dir1/ignoredir1\* dir1/ignoredir2\*
  adding: dir1/ (stored 0%)
  adding: dir1/dir3/ (stored 0%)
  adding: dir1/dir3/test3.txt (deflated 13%)
  adding: dir1/test.txt (stored 0%)
4

@sulman используя:

     zip -r myarchive.zip dir1 -x dir1/ignoreDir1/**\* dir1/ignoreDir2/**\*

по-прежнему будет включать папку dir1/ignoreDir1/ empty в zip-архив, используя:

     zip -r myarchive.zip dir1 -x dir1/ignoreDir1** dir1/ignoreDir2**

добьется цели, вы также можете использовать ведущий ** для поиска в подпапках вместо только dir1

1

Точно так же как другие ответы, но полностью исключая каталоги, вместо того, чтобы исключить все содержимое каталогов:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/\* dir1/ignoreDir2/\*
0

Я нашел это, чтобы работать от Дэвида R Heffelfinger:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1\* dir1\ignorDir2\*

Исключен каталог и его содержимое.

-1

У меня сработало: zip -9 -r ~/folded.zip онлайн -x folder/folder2/folder3/foldern/\*.

Кажется, что звездочка должна быть экранирована.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .