У мене є цей дуже простий рядок у скрипті bash, який успішно виконується (тобто створює _data.tar
файл), за винятком того, що він не виключає підкаталогів, про які сказано виключити через --exclude
параметр:
/bin/tar -cf /home/_data.tar --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*' /data
Натомість він створює _data.tar
файл, який містить все під / дані, включаючи файли у підкаталогах, які я хотів виключити.
Будь-яка ідея чому? і як це виправити?
Оновлення Я реалізував свої спостереження на основі посилання, наведеного у першій відповіді нижче (перший реж. Dir, немає пробілів після останнього виключити):
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*'
Але це не допомогло. Усі "виключені" підкаталоги містяться в отриманому _data.tar
файлі.
Це дивовижно. Невже це помилка в поточному дьогті (GNU tar 1.23, на CentOS 6.2, Linux 2.6.32) або "надзвичайна чутливість" дьогтю до пробілів та інших помилок, які я легко пропускаю, я вважаю це помилкою. Зараз.
Це жахливо : я спробував уявлення, запропоноване нижче (без трейлінгу /*
), і воно все ще не працює в сценарії виробництва:
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1' --exclude='/data/sub2' --exclude='/data/sub3' --exclude='/data/sub4'
Я не бачу різниці між тим, що я спробував, і тим, що намагався @ Richard Perrin, за винятком цитат та 2 пробілів замість 1. Я спробую це (я повинен зачекати, коли нічний скрипт запуститься як резервна копія каталогу вгору величезна) і звітуйте назад.
/bin/tar -cf /home/_data.tar /data --exclude=/data/sub1 --exclude=/data/sub2 --exclude=/data/sub3 --exclude=/data/sub4
Я починаю думати, що всі ці tar --exclude
чутливості не є дьогтем, а чимось у моєму середовищі, але тоді, що це може бути?
Це спрацювало! Остання спробувана варіація (жодної лапки та пробілу замість подвійного пробілу між ними --exclude
перевірено не працює). Дивно, але прийнято.
Неймовірно! Виявляється, старіша версія tar
(1.15.1) виключала б лише те, що dir верхнього рівня останній у командному рядку. Це абсолютно протилежне тому, як вимагає версія 1.23. FYI.