Відповіді:
Дійсно немає великої різниці між використанням косої косої риски або взагалі не для каталогу, за винятком обробки символьних посилань. Див. Технічні характеристики базової групи, 4.11 Роздільна здатність іменника (також див. Цю відповідь у Unix SE).
Що стосується дьогтю GNU: косою косою рисою просто не обробляються --excludeшаблони, як ви помітили. Різниця просто викликана його специфічним вихідним кодом, якщо варто щось вказувати :-). Дивіться це запитання на сервері Server Fault SE (хоча воно не дає багато деталей - воно лише констатує факт). Дивіться цю поштову нитку для деякої пов’язаної інформації Підказку можна знайти в цьому уривку (хоча я не зовсім впевнений, що з цього зробити):
Отто Мербек писав:
Це фрагмент коду, який є релевантним:
/* * 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';Як ви бачите з hexdump -C архівів, створених gtar, gtar - така програма. Мені не подобається міняти гурток лише для того, щоб розмістити невідповідні програми.
Зазвичай, це зводиться до конвенції програми. З (GNU) tarце трохи непослідовно, тому що трейлінг / не змінює включені каталоги. Поведінка частково пояснюється тут « зразки і імена використовуються як є ». Виключення можуть відповідати будь-якій частині імені (якщо ви не використовуєте --anchor).
З документації не ясно, чи є різниця, або чому.
Внутрішня причина, що трейлінг / не збігається в виключенні, полягає в тому, що tarвикористовується opendir(3), readdir(3)і fnmatch(3)- opendir()приймає трейлінг /в каталозі, readdir()не ставить косу рису на імена каталогів і fnmatch()просто відповідає шаблонам без урахування існуючих файлів або канонізації. Зокрема, fnmatch("proc/","proc",0)повертає 1 (не відповідає).
Порівняйте, rsyncщо має дуже чіткі (і добре задокументовані) відмінності для останнього / назви каталогів.
Пов'язана проблема полягає в тому, що іноді ви хочете створити резервну копію каталогу, оскільки це точка монтажу , хоча ви не хочете, щоб його вміст. Завдання резервного копіювання може містити всі необхідні точки монтажу ( /dev proc /sys), так що зазвичай ви хочете зробити:
tar --exclude=/proc/* --exclude=/sys/* --exclude=/dev/* [...]