Chcę utworzyć archiwum tar dla określonego katalogu (oczywiście z jego podkatalogami). Ale kiedy to robię, za pomocą polecenia tar otrzymuję listę plików, które zostały uwzględnione, na przykład:
kalendarz_końcowy /._ style.css
kalendarz_końcowy / style.css
Jak widać, istnieją dwie wersje tego samego pliku. Dotyczy to każdego pliku i jest ich wiele. Jak wykluczyć pliki tymczasowe z prefiksem ._ z archiwum tar?
Odpowiedzi:
W komentarzu napisałeś, że pracujesz w systemie Mac OS X. Jest to ważna wskazówka na temat celu tych
._*
plików.Te
._*
wpisy archiwalne są fragmentami danych AppleDouble, które zawierają dodatkowe informacje związane z odpowiednim plikiem (ten bez._
prefiksu). Są one generowane przez specyficzną dla Mac OS X rodzinę funkcji copyfile (3) . Obiekty blob AppleDouble przechowują dane kontroli dostępu (ACL) i rozszerzone atrybuty (zwykle flagi Findera i „widelce zasobów”, ale xattrs mogą być używane do przechowywania dowolnego rodzaju danych).Dostarczone przez system narzędzia do archiwizacji Mac OS X (
bsdtar
(również symbolizowane jakotar
),gnutar
ipax
) wygenerują element._*
archiwum dla każdego pliku, z którym powiązane są dowolne informacje rozszerzone; w trybie „niezarchiwizowanym” dekodują również tych członków archiwum i stosują uzyskane rozszerzone informacje do powiązanego pliku. Tworzy to archiwum „pełnej wierności” do użytku w systemach Mac OS X, zachowując, a następnie wyodrębniając wszystkie informacje, które może przechowywać system plików HFS +.Odpowiednie narzędzia do archiwizacji w innych systemach nie wiedzą, jak obsługiwać te
._*
pliki, więc są one rozpakowywane jak zwykłe pliki. Ponieważ takie pliki są dość bezużyteczne w innych systemach, często są postrzegane jako „niepotrzebne pliki”. Odpowiednio, jeśli system inny niż Mac OS X wygeneruje archiwum zawierające normalne pliki, które zaczynają się od._
, narzędzia do archiwizacji Mac OS X spróbują dekodować te pliki jako informacje rozszerzone.Istnieje jednak nieudokumentowany (?) Sposób, aby dostarczone przez system archiwizatory Mac OS X zachowywały się tak, jak w innych systemach Unixy: zmienna środowiskowa COPYFILE_DISABLE. Ustawienie tej zmiennej (na dowolną wartość, nawet pusty ciąg znaków) uniemożliwi archiwizatorom generowanie
._*
elementów archiwalnych do reprezentowania jakichkolwiek rozszerzonych informacji związanych z zarchiwizowanymi plikami. Jego obecność uniemożliwi również archiwizatorom interpretację takich członków archiwum jako rozszerzonych informacji.Możesz ustawić tę zmienną w pliku inicjalizacji powłoki, jeśli chcesz pracować w ten sposób częściej niż nie.
Następnie, gdy trzeba ponownie włączyć tę funkcję (aby zachować / przywrócić rozszerzone informacje), można „rozbroić” zmienną dla poszczególnych poleceń:
Archiwa w systemie Mac OS X 10.4 również robią coś podobnego, chociaż używają innej zmiennej środowiskowej: COPY_EXTENDED_ATTRIBUTES_DISABLE
źródło
To powinno działać:
źródło
tar --version
daje GNU 1.23 tutaj.tar vzcf ...
aby sprawdzić, czy zostały dołączone nieprawidłowe pliki.Frederik Deweerdt podał rozwiązanie, które działa na tarce GNU (używanej w Linuksie, Cygwin, FreeBSD, OSX, ewentualnie innych), ale nie w innych systemach, takich jak NetBSD, OpenBSD lub Solaris.
POSIX nie określa
tar
polecenia (ponieważ zmienia się zbyt dziko między wariantami uniksowymi) ipax
zamiast tego wprowadza polecenie. Opcja-w
oznacza utworzenie archiwum (-r
wyciągów) i-x
wybór formatu archiwum. Opcja-s '!BRE!!'
wyklucza wszystkie pliki, których ścieżka jest zgodna z podstawowym wyrażeniem regularnym BRE.źródło
Począwszy od
bsdtar 3.0.3 - libarchive 3.0.3
(i być może wcześniej) pojawiła się nowa opcja (specyficzna dla systemu Mac OS X) dlabsdtar
polecenia wywoływanego w--disable-copyfile
celu powstrzymania tworzenia._
plików. Starsze wersjetar
nie mają tej--disable-copyfile
opcji, ale ustawienie zmiennej środowiskowejCOPYFILE_DISABLE=1
powinno działać.źródło
bsdtar 2.8.3 - libarchive 2.8.3
z nie jest udokumentowany, ale mimo wszystko dostępne.10.7.5
--disable-copyfile
Wykonaj następujące kroki:
Znajdź wszystkie
._
pliki i wyświetl je za pomocą-ls
, abyś mógł zobaczyć wszystkie._
pliki i je ostatecznie usunąć.Utwórz archiwum .tar za pomocą.
źródło