Yanıtlar:
Genelde bir dizin için eğik çizgi kullanımı veya genel olarak kullanılmaması arasında, sembolik bağlantıların ele alınması dışında, gerçekten önemli bir fark yoktur. Görmek Açık Grup Bazlı Özellikler, 4.11 Pathname Resolution (ayrıca bakınız bu cevap Unix SE'de).
GNU katran söz konusu olduğunda: sondaki eğik çizgi basitçe ele alınmaz --exclude
fark ettiğiniz gibi Aradaki fark, kaynak kodundan kaynaklanır, eğer biri bir şeye işaret ederse :-) Görmek bu soru Server Fault SE'de (fazla ayrıntı vermese de - sadece gerçeği belirtir). Görmek bu posta dizisi bazı ilgili bilgiler için. Bu pasajda bir ipucu bulunabilir (ne yapacağımdan tam olarak emin olmasam da):
Otto Moerbeek şunu yazdı:
Bu kodun parçası olduğu ilgili:
/* * Some programs that create ustar archives append a '/' * to the pathname for directories. This clearly violates * ustar specs, but we will silently strip it off anyway. */ if (arcn-> name[arcn-> nlen - 1] == '/') arcn-> name[--arcn-> nlen] = '\0';
Gtar tarafından oluşturulan arşivlerin hexdump -C ile görebileceğiniz gibi, gtar böyle bir program. Katran değiştirmek için katran değiştirmek istemiyorum uygun olmayan programlar.
Genellikle programın sözleşmesine bağlıdır. (GNU) ile tar
bu biraz tutarsız çünkü takip eden / değişmeyen dahil dizinleri. Davranış kısmen açıklanmıştır İşte " desen ve adlar olduğu gibi kullanılır ". Hariç tutmalar ismin herhangi bir bölümünü eşleyebilir (siz --anchor
).
Dokümantasyonda bir fark olduğu ya da neden olduğu açık değildir.
Dahili olarak, izlemenin / hariç tutmamanın eşleşmemesinin nedeni tar
kullanımları opendir(3)
, readdir(3)
ve fnmatch(3)
- opendir()
izini kabul eder /
bir dizinde readdir()
dizin adlarına eğik çizgi koymaz ve fnmatch()
sadece mevcut dosyalara veya kurallara uygun hale getirilmeden kalıpları eşleştirir. özellikle, fnmatch("proc/","proc",0)
1 döndürür (eşleşme yok) ..
Karşılaştırmak rsync
Sonunda / dizin adları için çok farklı (ve iyi belgelenmiş) farklılıklar vardır.
İlgili bir sorun, bazen bir dizini yedeklemek istediğinizdir çünkü bağlantı noktası , içeriğini istemiyorum rağmen. Yedeklemenizin amacı tüm gerekli montaj noktalarını içerebilir ( /dev
proc
/sys
) bu yüzden genellikle yapmak istersiniz:
tar --exclude=/proc/* --exclude=/sys/* --exclude=/dev/* [...]