Pobierz Mac tar, aby przestał umieszczać nazwy plików ._ * w archiwach tar [duplikat]

46

Możliwa duplikat:
Dlaczego w moim archiwum tar w systemie OS X otrzymuję pliki takie jak ._foo?

Tworzę skrypty autoconf na komputerze Mac. Po uruchomieniu tar umieszcza wszystkie te nazwy ._ foobar w archiwum:

libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpr
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpr

Teraz system plików HFS firmy Apple umieszcza właściwości pliku w nazwach ._ foobar , aby można je było przywrócić na innym systemie Mac. Ale ja ich nie chcę --- są dla mnie tylko śmieciami. Czy jest jakiś sposób, aby je stłumić?

vy32
źródło
2
@geekosaur Użytkownik na unix.SE zrezygnował i przyjął błędną odpowiedź.
Daniel Beck
Istnieje również powiązane pytanie Pytanie SU dotyczące prawidłowego rozpakowywania ._*plików z archiwów (np. .__init__.py), Które używa tego samego rozwiązania.
Chris Johnsen

Odpowiedzi:

69

Za odpowiedź na inne pytanie , można ustawić nieudokumentowanych (?) Zmienną środowiskową COPYFILE_DISABLE aby zapobiec kilka programów systemowych dostarczone (w tym smoły ) od wydawania specjalnego znaczenia do ._*archiwalnych członków. W szczególności zapobiegnie to:

  • przechowywanie rozszerzonych danych atrybutów (w tym rozwidleń zasobów) w ._*elementach archiwów
    (tj. nie „zanieczyszcza” ”archiwów utworzonych w Mac OS X, ale przeznaczonych do użycia w innych systemach), oraz

  • próba wyodrębnienia rozszerzonych atrybutów lub zasobów z elementów archiwalnych o nazwach podobnych ._*
    (tj. nie należy źle interpretować ._*elementów archiwalnych w archiwach z innych systemów).

Wartość używana dla zmiennej środowiskowej nie jest ważna (może to być nawet pusty ciąg). Wartości takie jak 0i falsenie włączają ponownie tej funkcji. Liczy się tylko to, czy zmienna jest ustawiona (musisz ją „rozbroić”, aby włączyć tę funkcję).

Tej zmiennej można użyć do poszczególnych poleceń, korzystając z możliwości powłok typu Bourne'a ( sh , ksh , bash , zsh itp.), Aby poprzedzać polecenia dodatkowymi zmiennymi środowiskowymi.

COPYFILE_DISABLE=1 tar cf new.tar …

Jeśli często napotykasz problem, możesz chcieć ustawić i wyeksportować tę zmienną do jednego z plików inicjujących powłokę.

# turn off special handling of ._* files in tar, etc.
COPYFILE_DISABLE=1; export COPYFILE_DISABLE

W razie potrzeby możesz rozbroić zmienną dla poszczególnych poleceń.

(unset COPYFILE_DISABLE; tar cf somefile.tar …)

W tym systemie Mac OS X 10.6 wszystkie poniższe polecenia wydają się wiedzieć o COPYFILE_DISABLE:

  • /usr/bin/tar(symboliczny link do bsdtar)
  • /usr/bin/bsdtar
  • /usr/bin/gnutar
  • /bin/pax

COPYFILE_DISABLE pochodzi z Mac OS X 10.5. Jeśli potrzebujesz obsługiwać 10.4, ma COPY_EXTENDED_ATTRIBUTES_DISABLE, który działa w ten sam sposób.

Chris Johnsen
źródło
ŁAŁ. Właśnie tego szukałem. Dzięki. Moje pliki autoconf będą znacznie, znacznie czystsze.
vy32
0

Nie był ekspertem, ale trochę google znalazł: http://www.ofzenandcomputing.com/zanswers/3422

i to: http://hintsforums.macworld.com/archive/index.php/t-28703.html

Drugie polecenie wygląda na to, że można je włączyć do skryptu ... możesz nie być w stanie zapobiec tworzeniu plików wideł zasobów, ale możesz je później automatycznie usunąć.

edycja: Powinienem wspomnieć, że może to mieć złe wyniki, używaj na własne ryzyko.

CreeDorofl
źródło
1
Skrypt usuwa widelce zasobów z plików na dysku lokalnym. Zwykle służą do określonego celu (np. Do zmiany powiązanej aplikacji z określonym plikiem), dlatego powinno to zawierać duże ostrzeżenie.
Daniel Beck
Skrypt mi ​​nie pomaga. Usuwa pliki z dysku, a nie z archiwum tar. Okazuje się, że nie mam plików zasobów na moim dysku. Ale są umieszczane w archiwum. W przeciwieństwie do plików zip, nie można po prostu usunąć plików z archiwum tar.
vy32
(bah, przekroczenia limitu czasu) Właściwie możesz, jeśli używasz prawie dowolnego z tarwyjątkiem BSD libarchive(dotyczy to Mac OS X), ale może nie być wiarygodny; instalowanie GNU tar jest często dobrym pomysłem. (Jest to jednak bolesne. Myślę, że musisz wymienić je wszystkie, a następnie przekazać te nazwy w wierszu poleceń.) Również widelce zasobów technicznie znajdują się na dysku, ale na HFS + są przechowywane w rozszerzonych atrybutach; te ._pliki są sposobem OS X przechowywania widelce zasobów w miejscach, które nie obsługują atrybutów rozszerzonych.
geekozaur
0

Możesz spróbować skompilować własny tarlub zainstalować go z Macports lub Fink, jeśli jest dostępny (Homebrew go nie ma). Przy odrobinie szczęścia powinno być ignorowane metadane OS X i pomijać tworzenie tych plików.

Daniel Beck
źródło
Byłbym wdzięczny za wyjaśnienie tej opinii. Dziękuję Ci.
Daniel Beck