Kiedy kompresuję pliki za pomocą wbudowanego kompresora zip w systemie Mac OSX, w wyniku wyodrębnionego zipa powstaje dodatkowy folder o nazwie „__MACOSX”.
Czy mogę dostosować ustawienia, aby zapobiec tworzeniu tego folderu, czy muszę kupić narzędzie do kompresji innej firmy?
AKTUALIZACJA : właśnie znalazłem darmową aplikację dla OSX, która rozwiązuje mój problem: „ YemuZip ”
UPDATE 2 : YemuZip nie jest już oprogramowaniem darmowym
__MACOSX
,.DS_Store
,._fileName
, i wszystkie inne różne turds Mac OS spada w swoich archiwach. „Tar” OSX również to robi - w rażącym lekceważeniu zasady najmniejszego zdziwienia .Odpowiedzi:
Kiedy miałem ten problem, zrobiłem to z linii poleceń:
zip file.zip uncompressed
EDYCJA , po wielu negatywnych opiniach: Korzystałem z tej opcji jakiś czas temu i nie wiem, gdzie się jej nauczyłem, więc nie mogę dać ci lepszego wyjaśnienia. Chris Johnson odpowiedź jest poprawna, ale nie usunie moje. Jak mówi jeden z komentarzy, jest dokładniejszy do tego, o co pyta OP, ponieważ kompresuje bez tych plików, zamiast usuwać je ze skompresowanego pliku. Łatwiej mi też zapamiętać.
źródło
zip
pomocą aplikacji innej firmy, wówczas katalog __MACOSX / nigdy nie zostanie utworzony.zip -rX file.zip uncompressed_directory
Można naprawić po fakcie do
zip -d filename.zip __MACOSX/\*
źródło
zip -d filename.zip \*/.DS_Store
find ~ -type f -name '*.zip' -exec zip -d '{}' __MACOSX/\* \;
. Zamień swój punkt początkowy na~
.cleanzip(){ zip -d $1 $2 __MACOSX/\* \*/.DS_Store; }
. Sposób użycia:cleanzip file.zip
lubcleanzip file.zip MORE_JUNK_FILES
(drugi parametr jest opcjonalny)W folderze, który chcesz skompresować, w terminalu:
Gdzie -X oznacza: wyklucz te niewidoczne pliki zasobów Maca, takie jak „_MACOSX” lub „._Filename” i .ds przechowuj pliki
źródło
Uwaga: będzie działać tylko dla folderu i kolejnego drzewa folderów, w którym się znajdujesz, i musi mieć
*
symbol wieloznaczny.źródło
-X
nie wyklucza plików .DS_Store. Powodem, dla którego może to działać w przypadku Twojej aplikacji, jest to, że kompresujesz tylko*
pliki, które są zgodne z symbolami wieloznacznymi, które nie zaczynają się od „.”. Wypróbuj go w katalogu zawierającym plik z kropką, a zobaczysz, że zostanie dołączony.zip -r -X Archive.zip myfolder
na folderze nadal powoduje powstanie pliku ZIP zawierającego plik .DS_Store.To polecenie zrobiło to za mnie:
Target.zip
to plik zip do utworzenia.Source
to plik / folder źródłowy do skompresowania. A_x
parametr określa plik / folder nie należą. Jeśli powyższe nie działa z jakiegokolwiek powodu, spróbuj zamiast tego:źródło
zip
wiersza poleceń nigdy nie tworzy__MACOSX
katalogu, więc pierwszy fragment kodu działa, a-x "__MACOSX"
część nie jest potrzebna.Używam tego skryptu Automator Shell, aby to naprawić później. Jest wyświetlany jako pozycja menu kontekstowego (kliknięcie prawym przyciskiem myszy dowolnego pliku wyświetlanego w Finderze).
źródło
zip -d "$p" __MACOSX/\* || true
w odpowiedzi.Niechciane foldery można również usunąć w następujący sposób:
U mnie działa najlepiej
źródło
-x "*/\__MACOSX"
: ignoruj __MACOSX, jak wspomniałeś.-x "*/\.*"
: zignoruj każdy ukryty plik, taki jak .DS_Store.Możesz także zbudować usługę Automator, aby ułatwić korzystanie z niej w Finderze. Sprawdź link poniżej, aby zobaczyć szczegóły, jeśli potrzebujesz.
Github
źródło
Narzędzie
zip
wiersza poleceń nigdy nie tworzy__MACOSX
katalogu, więc możesz po prostu uruchomić takie polecenie:Poniższe dane wyjściowe,
a.zip
które utworzyłem za pomocązip
narzędzia wiersza poleceń, nie zawierają__MACOSX
katalogu, alea 2.zip
który utworzyłem za pomocą Findera.-x .DS_Store
nie wyklucza.DS_Store
plików wewnątrz katalogów, ale-x \*.DS_Store
robi.Plik najwyższego poziomu archiwum zip z wieloma plikami powinien zwykle być pojedynczym katalogiem, ponieważ jeśli tak nie jest, niektóre narzędzia do archiwizacji (takie jak
unzip
i7z
, ale nie Archive Utility, The Unarchiverunar
lubdtrx
) nie tworzą katalogu zawierającego pliki po rozpakowaniu archiwum, co często utrudnia ich znalezienie, a jeśli wiele archiwów jest rozpakowywanych w tym samym czasie, określenie, które pliki należą do którego archiwum, może być trudne.Archive Utility tworzy
__MACOSX
katalog tylko wtedy, gdy tworzysz archiwum, w którym co najmniej jeden plik zawiera metadane, takie jak atrybuty rozszerzone, flagi plików lub rozwidlenie zasobów.__MACOSX
Katalog zawiera pliki, których nazwa pliku AppleDouble rozpoczyna się._
, które są używane do przechowywania OS X specyficzne metadanych. Narzędziezip
wiersza poleceń odrzuca metadane, takie jak atrybuty rozszerzone, flagi plików i rozwidlenia zasobów, co oznacza również, że metadane, takie jak znaczniki, są tracone, a aliasy przestają działać, ponieważ informacje w pliku aliasów są przechowywane w rozwidleniu zasobów.Zwykle możesz po prostu odrzucić metadane specyficzne dla OS X, ale aby zobaczyć, jakie pliki metadanych zawierają, możesz użyć
xattr -l
.xattr
zawiera również rozwidlenia zasobów i flagi plików, ponieważ nawet jeśli nie są one faktycznie przechowywane jako atrybuty rozszerzone, można uzyskać do nich dostęp poprzez interfejs atrybutów rozszerzonych. Zarówno Archive Utility, jak izip
narzędzie wiersza poleceń odrzucają listy ACL.źródło
Nie możesz.
Ale co możesz zrobić, to usunąć te niechciane foldery po spakowaniu. Linia poleceń
zip
przyjmuje różne argumenty, z których jeden, czyli-d
, służy do usuwania zawartości na podstawie wyrażenia regularnego. Możesz więc używać tego w ten sposób:źródło
nie spakuj żadnego ukrytego pliku:
z tym pytaniem powinno wyglądać następująco:
Trzeba jednak powiedzieć, że polecenie zip działa w terminalu tylko kompresując plik, nie kompresuje żadnych innych. Więc zrób to, wynik jest taki sam:
źródło
__MACOSX
nie zaczyna się od.
Masz na myśli
zip
narzędzie wiersza poleceń czy polecenie kompresji Findera?Dla
zip
, można spróbować--data-fork
opcji. Jeśli to nie pomoże, możesz spróbować--no-extra
, chociaż wydaje się, że ignoruje to inne metadane plików, które mogą być cenne, takie jak uid / gid i czasy plików.Nie sądzę, aby w przypadku polecenia Finder's Compress można było kontrolować jego zachowanie. To dla prostego przypadku.
Drugim narzędziem, a może tym, którego Finder faktycznie używa pod maską, jest
ditto
. Dzięki-c -k
opcjom tworzy archiwa zip. Za pomocą tego narzędzia można eksperymentować z--norsrc
,--noextattr
,--noqtn
,--noacl
i / lub po prostu zostawić wyłączyć--sequesterRsrc
opcję (które, według strony człowieka, może być odpowiedzialny za__MACOSX
podkatalogu). Chociaż być może brak--sequesterRsrc
prostego oznacza użycie formatu AppleDouble, który utworzyłby pliki ._ w dowolnym miejscu zamiast w jednym__MACOSX
katalogu.źródło
Mam lepsze rozwiązanie po przeczytaniu wszystkich istniejących odpowiedzi. Wszystko można było zrobić za pomocą przepływu pracy jednym kliknięciem prawym przyciskiem myszy. BEZ dodatkowego oprogramowania, ŻADNYCH skomplikowanych elementów wiersza poleceń i ŻADNYCH sztuczek powłoki.
Przepływ pracy automatora:
Krok 2: Uruchom polecenie Shell z danymi wejściowymi jako parametrami. Kopiuj polecenie poniżej.
zip -d "$@" "__MACOSX/*" || true
zip -d "$@" "*/.DS_Store" || true
Zapisz to i gotowe! Po prostu kliknij prawym przyciskiem myszy folder lub większość plików i wybierz przepływ pracy z menu usług. Archiwum bez metadanych zostanie utworzone obok.
źródło
W ten sposób unikam
__MACOSX
katalogu podczas kompresji plików za pomocątar
polecenia:$ cd dir-you-want-to-archive $ find . | xargs xattr -l # <- list all files with special xattr attributes ... ./conf/clamav: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55 ./conf/global: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55 ./conf/web_server: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55
Najpierw usuń atrybut:
find . | xargs xattr -d com.apple.quarantine
Uruchom
find . | xargs xattr -l
ponownie, upewnij się, że żaden plik nie ma atrybutu xattr. więc jesteś gotowy:tar cjvf file.tar.bz2 dir
źródło