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

У меня есть папка /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 ГБ файлов.

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


person suresh    schedule 27.11.2010    source источник


Ответы (10)


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

tar -pczf MyBackup.tar.gz /home/user/public_html/ --exclude "/home/user/public_html/tmp" 
person Victor Parmar    schedule 27.11.2010
comment
Чтобы исключить всю папку и ее содержимое: tar -pczvf MyBackup.tar.gz / home / user / public_html / --exclude / home / user / public_html / tmp / * - person Dr.jacky; 14.11.2016
comment
Я получаю tar: Error exit delayed from previous errors. в macos - person prayagupd; 29.06.2018
comment
Получение сообщения об ошибке tar: удаление начального символа `/ 'из имен членов - person SenG; 20.11.2018
comment
Не работает, пришлось использовать --exclude="/home/user/public_html/tmp вместо --exclude "/home/user/public_html/tmp - person Black; 05.12.2018
comment
Действительно, сначала нужно указать exclude. - person kghbln; 12.03.2019
comment
Не обращайте внимания на мой предыдущий комментарий, который я больше не могу редактировать: exclude необходимо сначала указать как stackoverflow.com/users/3904223/oussaka Примечания. По крайней мере, это единственное, что сработало для меня - person kghbln; 12.03.2019
comment
этот ответ неверен. tar даже не имеет команды --exclude. это должно быть --exclude = ШАБЛОН исключить файлы, заданный как ШАБЛОН - person Don Dilanga; 16.04.2019
comment
Параметры --exclude следует размещать ПЕРЕД любыми источниками. - person scegg; 15.12.2019

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

tar -pczf MyBackup.tar.gz --exclude "/home/user/public_html/tmp/" /home/user/public_html/ 
person Martin Algesten    schedule 27.11.2010
comment
Спасибо, у меня это сработало на старой коробке Ubuntu 14.04 LTS. - person Jamsi; 10.01.2017
comment
Мне нужно было сделать это и на OS X. - person TheJacobTaylor; 28.04.2017

Да, удалите завершающий / и (по крайней мере, в 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"

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

person user    schedule 24.08.2011
comment
Работайте для меня, когда я удаляю абсолютный путь в аргументе exclude. - person jruzafa; 02.03.2015
comment
Совет о смешивании абсолютных и относительных путей был для меня ключевым - person Dmitri DB; 14.04.2015

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

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

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

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

tar -tf backup.tar.gz
person oussaka    schedule 07.10.2016
comment
Спасибо ... Это сработало для меня на Ubuntu 18.04 LTS - person Festus Ngor; 14.01.2021

Вы также можете исключить более одного, используя только один --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 и / home / user / public_html /.

Синтаксис:

tar <OPTIONS> <TARBALL_WILL_CREATE> <ARGS> <PATH_TO_COMPRESS>
person LozanoMatheus    schedule 10.05.2018

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-го) заключается в следующем: второе имя будет включать в себя пустую папку в пакете, а первое - нет.
person scegg    schedule 15.12.2019

Попробуй это

tar -pczvf advancedarts.tar.gz /home/user/public_html/ --exclude /home/user/public_html/tmp
person Yogesh    schedule 30.11.2012

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

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

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

person user2081279    schedule 15.06.2018

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

tar -zcvf target.tar.gz target/ --exclude="target/backups" --exclude="target/cache"
person Black    schedule 05.12.2018

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

--exclude=/home/user/public_html/tmp
person Ivan Avery Frey    schedule 05.05.2015
comment
требуется, если в названии папки есть пробел - person Black; 05.12.2018