Mam tę bardzo prostą linię w skrypcie bash, który wykonuje się pomyślnie (tj. Produkuje _data.tar
plik), z tym wyjątkiem, że nie wyklucza podkatalogów, o których mówi się wykluczenie za pomocą --exclude
opcji:
/bin/tar -cf /home/_data.tar --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*' /data
Zamiast tego tworzy _data.tar
plik, który zawiera wszystko w katalogu / data, w tym pliki w podkatalogach, które chciałem wykluczyć.
Masz pomysł, dlaczego? i jak to naprawić?
Aktualizacja Zaimplementowałem swoje obserwacje na podstawie linku podanego w pierwszej odpowiedzi poniżej (najpierw najwyższy poziom, brak spacji po ostatnim wykluczeniu):
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*'
Ale to nie pomogło. Wszystkie „wykluczone” podkatalogi są obecne w _data.tar
pliku wynikowym .
To zastanawia. Niezależnie od tego, czy jest to błąd w bieżącym pliku tar (GNU tar 1.23, na CentOS 6.2, Linux 2.6.32), czy też „ekstremalna wrażliwość” tar na białe spacje i inne łatwe do pominięcia literówki, uważam to za błąd. Na razie.
To jest okropne : wypróbowałem wgląd sugerowany poniżej (bez końcowego /*
) i nadal nie działa w skrypcie produkcyjnym:
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1' --exclude='/data/sub2' --exclude='/data/sub3' --exclude='/data/sub4'
Nie widzę żadnej różnicy między tym, co próbowałem, a tym, co próbował @Richard Perrin, z wyjątkiem cudzysłowów i 2 spacji zamiast 1. Zamierzam spróbować (muszę poczekać na uruchomienie nocnego skryptu jako katalogu, którego kopię zapasową chcesz wykonać) jest ogromny) i zgłoś się.
/bin/tar -cf /home/_data.tar /data --exclude=/data/sub1 --exclude=/data/sub2 --exclude=/data/sub3 --exclude=/data/sub4
Zaczynam myśleć, że wszystkie te tar --exclude
wrażliwości to nie smoła, ale coś w moim środowisku, ale co to może być?
Zadziałało! Ostatnia wypróbowana odmiana (bez pojedynczych cudzysłowów i pojedynczej spacji zamiast podwójnej spacji między --exclude
s) przetestowana działająca. Dziwne, ale akceptujące.
Nie do wiary! Okazuje się, że starsza wersja tar
(1.15.1) wyklucza się tylko wtedy, gdy katalog najwyższego poziomu jest ostatni w linii poleceń. Jest to dokładne przeciwieństwo wymagań wersji 1.23. FYI.