Saya memiliki baris yang sangat sederhana ini dalam skrip bash yang dieksekusi dengan sukses (yaitu menghasilkan _data.tar
file), kecuali bahwa itu tidak mengecualikan sub-direktori yang dikatakan dikecualikan melalui --exclude
opsi:
/bin/tar -cf /home/_data.tar --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*' /data
Sebagai gantinya, ia menghasilkan _data.tar
file yang berisi semua yang ada di bawah / data, termasuk file dalam subdirektori yang ingin saya kecualikan.
Ada yang tahu kenapa? dan bagaimana cara memperbaikinya?
Pembaruan Saya menerapkan pengamatan saya berdasarkan tautan yang disediakan dalam jawaban pertama di bawah (dir level atas pertama, tidak ada spasi setelah dikecualikan terakhir):
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*'
Tapi itu tidak membantu. Semua sub-direktori "dikecualikan" hadir dalam _data.tar
file yang dihasilkan .
Ini membingungkan. Apakah ini bug dalam tar saat ini (GNU tar 1.23, pada CentOS 6.2, Linux 2.6.32) atau "sensitivitas ekstrim" tar terhadap spasi putih dan kesalahan ketik yang mudah dilewatkan lainnya, saya menganggap ini bug. Untuk sekarang.
Ini mengerikan : Saya mencoba wawasan yang disarankan di bawah ini (tidak tertinggal /*
) dan masih tidak berfungsi dalam skrip produksi:
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1' --exclude='/data/sub2' --exclude='/data/sub3' --exclude='/data/sub4'
Saya tidak dapat melihat perbedaan antara apa yang saya coba dan apa yang @Richard Perrin coba, kecuali untuk tanda kutip dan 2 spasi sebagai ganti 1. Saya akan mencoba ini (harus menunggu skrip nightly berjalan sebagai direktori yang akan didukung Facebook sangat besar) dan melaporkan kembali.
/bin/tar -cf /home/_data.tar /data --exclude=/data/sub1 --exclude=/data/sub2 --exclude=/data/sub3 --exclude=/data/sub4
Saya mulai berpikir bahwa semua tar --exclude
kepekaan ini bukan tar melainkan sesuatu di lingkungan saya, tetapi kemudian apa yang bisa terjadi?
Berhasil! Variasi terakhir mencoba (tidak ada tanda kutip tunggal dan spasi tunggal alih-alih spasi ganda antara --exclude
s) yang diuji. Aneh tapi menerima.
Luar biasa! Ternyata versi yang lebih lama tar
(1.15.1) hanya akan mengecualikan jika level atas dir terakhir pada baris perintah. Ini adalah kebalikan dari bagaimana versi 1.23 membutuhkan. FYI.