Mengecualikan direktori saat membuat file .tar.gz

119

Saya punya /public_html/folder, di folder itu ada /tmp/folder yang berisi 70 GB file yang tidak terlalu saya butuhkan.

Sekarang saya mencoba untuk membuat .tar.gzdari /public_html/tidak termasuk/tmp/

Ini adalah perintah yang saya jalankan:

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

Tar masih dibuat, dan dengan melakukan ls -shsaya dapat melihat bahwa MyBackup.tar.gzsudah memiliki sekitar 30gb, dan saya tahu pasti bahwa /public_html/tanpa /tmp/tidak memiliki lebih dari 1GB file.

Apa kesalahan yang telah aku perbuat?

suresh
sumber
yang -ppilihan tidak memiliki makna dalam hal fungsi membuat, kan !?
Martin Schneider

Jawaban:

201

Coba hapus yang terakhir / di akhir jalur direktori untuk dikecualikan

tar -pczf MyBackup.tar.gz /home/user/public_html/ --exclude "/home/user/public_html/tmp" 
Victor Parmar
sumber
7
Untuk mengecualikan seluruh folder dan isinya: tar -pczvf MyBackup.tar.gz / home / user / public_html / --exclude "/ home / user / public_html / tmp / *"
Dr.jacky
Saya masuk tar: Error exit delayed from previous errors.macos
prayagupd
Mendapatkan tar kesalahan: Menghapus awalan `/ 'dari nama anggota
SenG
2
Tidak bekerja, saya harus menggunakan --exclude="/home/user/public_html/tmpsebagai gantinya--exclude "/home/user/public_html/tmp
Hitam
1
Abaikan komentar saya sebelumnya yang tidak lagi dapat saya edit: excludeperlu ditentukan terlebih dahulu sebagai catatan stackoverflow.com/users/3904223/oussaka . Setidaknya itulah satu-satunya hal yang berhasil untuk saya
kghbln
46

Coba pindahkan --excludeke sebelum memasukkan.

tar -pczf MyBackup.tar.gz --exclude "/home/user/public_html/tmp/" /home/user/public_html/ 
Martin Algesten
sumber
Terima kasih, ini berfungsi untuk saya di kotak Ubuntu 14.04 LTS yang lama.
Jamsi
1
Saya perlu melakukan ini di OS X juga.
TheJacobTaylor
16

Ya, hapus trailing /dan (setidaknya di ubuntu 11.04) semua jalur yang diberikan harus jalur relatif atau lengkap. Anda tidak dapat mencampur jalur absolut dan relatif dalam perintah yang sama.

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

tidak akan mengecualikan direktori log tapi

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

akan bekerja

pengguna
sumber
1
Bekerja untuk saya ketika saya menghapus jalur absolut dalam argumen pengecualian.
jruzafa
2
Tip tentang mencampur jalur absolut dan relatif adalah kunci bagi saya di sini
Dmitri DB
12

Perintah yang benar untuk mengecualikan direktori dari kompresi adalah:

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

Pastikan untuk meletakkan --exclude sebelum item sumber dan tujuan .

dan Anda dapat memeriksa konten file tar.gz tanpa membuka ritsleting:

tar -tf backup.tar.gz
oussaka
sumber
3

Coba ini

tar -pczvf advancedarts.tar.gz /home/user/public_html/ --exclude /home/user/public_html/tmp
Yogesh
sumber
2

Anda juga dapat mengecualikan lebih dari satu dengan hanya menggunakan satu --exclude. Seperti contoh ini:

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

Di --exclude=Anda harus menyelesaikan nama direktori tanpa /dan harus di antara MyBackup.tar.gz dan / home / user / public_html /

Sintaksnya adalah:

tar <OPTIONS> <TARBALL_WILL_CREATE> <ARGS> <PATH_TO_COMPRESS>
LozanoMatheus
sumber
2

Jawaban yang diterima tidak berhasil untuk saya, menjalankan unxutils tar di windows10. Sebagai gantinya, saya harus meletakkan file / dirs ke arsip sebagai parameter terakhir , seperti ini:

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

Kemudian berhasil.

pengguna2081279
sumber
2

Ini berhasil untuk saya:

tar -zcvf target.tar.gz target/ --exclude="target/backups" --exclude="target/cache"
Hitam
sumber
2

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

Diuji di Ubuntu 19.10.

  1. The =setelah excludeopsional. Anda dapat menggunakan =spasi setelah kata kunci excludejika Anda suka.
  2. Parameter excludeharus ditempatkan sebelum sumber.
  3. Perbedaan antara menggunakan nama folder (seperti yang pertama) atau * (seperti yang ke-2) adalah: yang ke-2 akan menyertakan folder kosong dalam paket tetapi yang pertama tidak.
scegg
sumber
-2

Opsi pengecualian harus menyertakan =tanda dan "tidak diperlukan.

--exclude=/home/user/public_html/tmp
Ivan Avery Frey
sumber
1
"diperlukan jika folder memiliki spasi dalam nama
Hitam