Czy istnieje proste polecenie / skrypt powłoki, który obsługuje wykluczanie archiwizacji niektórych plików / folderów?
Mam katalog, który należy zarchiwizować, z podkatalogiem zawierającym wiele bardzo dużych plików, których nie muszę tworzyć kopii zapasowej.
Niezupełnie rozwiązania:
tar --exclude=PATTERN
Komenda pasuje do podanego wzorca i wyklucza te pliki, ale muszę określone pliki i foldery, które mają być ignorowane (pełna ścieżka do pliku), inaczej ważne pliki mogą być wykluczone.
Mógłbym również użyć polecenia find, aby utworzyć listę plików i wykluczyć te, których nie chcę archiwizować i przekazać listę do tar, ale działa to tylko z niewielką ilością plików. Mam dziesiątki tysięcy.
Zaczynam myśleć, że jedynym rozwiązaniem jest utworzenie pliku z listą plików / folderów, które mają zostać wykluczone, następnie użyj rsync z, --exclude-from=file
aby skopiować wszystkie pliki do katalogu tmp, a następnie użyj tar do zarchiwizowania tego katalogu.
Czy ktoś może wymyślić lepsze / bardziej wydajne rozwiązanie?
EDYCJA: Rozwiązanie Charlesa Ma działa dobrze. Duża gotcha polega na tym, że --exclude='./folder'
MUSI znajdować się na początku polecenia tar. Pełna komenda (najpierw cd, więc kopia zapasowa jest względna w stosunku do tego katalogu):
cd /folder_to_backup
tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .
--exclude
nie musi być pierwszy, ale musi przyjść gdzieś przed katalogiem źródłowym (testowane w Tar 1.29 na Cygwin).