Исключение каталога при создании файла .tar.gz

119

у меня есть /public_html/ папка, в которой есть /tmp/папка с 70 ГБ файлов, которые мне действительно не нужны.

Теперь я пытаюсь создать .tar.gzиз/public_html/ исключения/tmp/

Это команда, которую я выполнил:

tar -pczf MyBackup.tar.gz /home/user/public_html/ --exclude "/home/user/public_html/tmp/" 

Tar все еще создается, и, сделав это, ls -shя вижу, что он MyBackup.tar.gzуже имеет около 30 ГБ, и я точно знаю, что /public_html/без/tmp/ него не более 1 ГБ файлов.

Что я сделал не так?

Суреш
источник
3
Возможный дубликат команды Shell в каталог tar, за исключением определенных файлов / папок
Organic Advocate
эта -pопция не имеет смысла с точки зрения функции создания, верно !?
Мартин Шнайдер

Ответы:

201

Попробуйте удалить последний / в конце пути к каталогу, чтобы исключить

tar -pczf MyBackup.tar.gz /home/user/public_html/ --exclude "/home/user/public_html/tmp" 
Виктор Пармар
источник
7
Чтобы исключить всю папку и ее содержимое: tar -pczvf MyBackup.tar.gz / home / user / public_html / --exclude «/ home / user / public_html / tmp / *»
Доктор Джеки
У меня tar: Error exit delayed from previous errors.macos
прайагупд
Получение сообщения об ошибке tar: удаление
начального символа
2
Не работает, пришлось использовать --exclude="/home/user/public_html/tmpвместо--exclude "/home/user/public_html/tmp
Black
1
Не обращайте внимания на мой предыдущий комментарий, который я больше не могу редактировать: его excludeнужно сначала указать как stackoverflow.com/users/3904223/oussaka notes. По крайней мере, это единственное, что у меня
сработало
46

Попробуйте переместить --excludeперед включением.

tar -pczf MyBackup.tar.gz --exclude "/home/user/public_html/tmp/" /home/user/public_html/ 
Мартин Альгестен
источник
Спасибо, у меня это сработало на старой коробке Ubuntu 14.04 LTS.
Jamsi
1
Мне нужно было сделать это и на OS X.
TheJacobTaylor
16

Да, удалите завершающий /и (по крайней мере, в ubuntu 11.04) все указанные пути должны быть относительными или полными. В одной команде нельзя смешивать абсолютные и относительные пути.

sudo tar -czvf 2011.10.24.tar.gz ./start-directory --exclude "home/user/start-directory/logs"

не будет исключать каталог журналов, но

sudo tar -czvf 2011.10.24.tar.gz ./start-directory --exclude "./start-directory/logs"

буду работать

пользователь
источник
1
Работайте для меня, когда я удаляю абсолютный путь в аргументе exclude.
jruzafa 02
2
Совет о смешивании абсолютных и относительных путей был для меня ключевым
Дмитрий ДБ
12

Правильная команда для исключения каталога из сжатия:

tar --exclude='./folder' --exclude='./upload/folder2' -zcvf backup.tar.gz backup/

Обязательно укажите --exclude перед элементами источника и назначения .

и вы можете проверить содержимое файла tar.gz, не распаковывая:

tar -tf backup.tar.gz
oussaka
источник
3

Попробуй это

tar -pczvf advancedarts.tar.gz /home/user/public_html/ --exclude /home/user/public_html/tmp
Yogesh
источник
2

Вы также можете исключить более одного, используя только один --exclude. Как этот пример:

tar -pczf MyBackup.tar.gz --exclude={"/home/user/public_html/tmp","/home/user/public_html/data"} /home/user/public_html/

В --exclude=вы должны закончить имя каталога без /и сусло между MyBackup.tar.gz и / дома / пользователя / public_html /

Синтаксис:

tar <OPTIONS> <TARBALL_WILL_CREATE> <ARGS> <PATH_TO_COMPRESS>
LozanoMatheus
источник
2

Принятый ответ не сработал для меня, запустив unxutils tar на windows10. Вместо этого мне пришлось поместить файлы / каталоги в архив как последнего параметра, например:

tar -pczf MyBackup.tar.gz --exclude "/home/user/public_html/tmp/" /home/user/public_html/

Тогда это сработало.

user2081279
источник
2

Это сработало для меня:

tar -zcvf target.tar.gz target/ --exclude="target/backups" --exclude="target/cache"
черный
источник
2

tar -pczf <target_file.tar.gz> --exclude /path/to/exclude --exclude /another/path/to/exclude/* /path/to/include/ /another/path/to/include/*

Проверено в Ubuntu 19.10.

  1. =После того, как не excludeявляется обязательным. Вы можете использовать =вместо пробела после ключевого слова, excludeесли хотите.
  2. Параметр excludeнеобходимо поставить перед источником.
  3. Разница между использованием имени папки (например, 1-го) и * (например, 2-го) заключается в следующем: второе будет включать в пакет пустую папку, а первое - нет.
scegg
источник
-2

Параметр исключения должен включать =знак и "не является обязательным.

--exclude=/home/user/public_html/tmp
Иван Эйвери Фрей
источник
1
"требуется, если в названии папки есть пробел
Black