Quando comprimo arquivos com o compressor zip incorporado no Mac OSX, resulta em uma pasta extra intitulada "__MACOSX" criada no zip extraído.
Posso ajustar minhas configurações para impedir que esta pasta seja criada ou preciso comprar uma ferramenta de compactação de terceiros?
ATUALIZAÇÃO : Acabei de encontrar um aplicativo gratuito para OSX que resolve meu problema: " YemuZip "
ATUALIZAÇÃO 2 : YemuZip não é mais freeware
__MACOSX
,.DS_Store
,._fileName
, e todas as outras merdas variados Mac OS cai em seus arquivos. O `tar 'da OSX faz isso também - em flagrante desrespeito ao princípio do mínimo espanto .Respostas:
Quando tive esse problema, fiz na linha de comando:
zip file.zip uncompressed
EDIT , depois de muitas votações negativas: eu estava usando essa opção há algum tempo e não sei onde aprendi, então não posso lhe dar uma explicação melhor. Chris Johnson resposta está correta, mas não vou apagar minha. Como um comentário diz, é mais preciso o que o OP está pedindo, pois é compactado sem esses arquivos, em vez de removê-los de um arquivo compactado. Também acho mais fácil lembrar.
fonte
zip
um aplicativo de terceiros, o diretório __MACOSX / nunca será criado.zip -rX file.zip uncompressed_directory
Pode ser corrigido após o fato por
zip -d filename.zip __MACOSX/\*
fonte
zip -d filename.zip \*/.DS_Store
find ~ -type f -name '*.zip' -exec zip -d '{}' __MACOSX/\* \;
. Substitua seu ponto de partida por~
.cleanzip(){ zip -d $1 $2 __MACOSX/\* \*/.DS_Store; }
. Uso:cleanzip file.zip
oucleanzip file.zip MORE_JUNK_FILES
(segundo parâmetro é opcional)Dentro da pasta que você deseja compactar, no terminal:
Onde -X significa: exclua os arquivos de recursos invisíveis do Mac, como "_MACOSX" ou "._Filename" e .ds armazenam arquivos
fonte
Nota: Funcionará apenas para a pasta e a árvore de pastas subsequente em que você está e precisa ter o
*
curinga.fonte
-X
não exclui arquivos .DS_Store. A razão pela qual isso pode funcionar para o seu aplicativo é que você está apenas compactando*
, que é um curinga que corresponde aos arquivos que não começam com ".". Experimente em um diretório que contém um arquivo de ponto e você verá que ele é incluído.zip -r -X Archive.zip myfolder
. A execução de uma pasta ainda resulta em um arquivo zip contendo o arquivo .DS_Store.Este comando fez isso por mim:
Target.zip
é o arquivo zip a ser criado.Source
é o arquivo / pasta de origem a ser compactado. E o_x
parâmetro especifica o arquivo / pasta a não incluir. Se o exposto acima não funcionar por qualquer motivo, tente o seguinte:fonte
zip
utilitário de linha de comando nunca cria um__MACOSX
diretório, portanto, o primeiro trecho funciona e a-x "__MACOSX"
parte não é necessária.Estou usando esse Script do Shell do Automator para corrigi-lo depois. Ele aparece como item de menu contextual (clique com o botão direito do mouse em qualquer arquivo exibido no Finder).
fonte
zip -d "$p" __MACOSX/\* || true
em sua resposta.As pastas indesejadas também podem ser excluídas da seguinte maneira:
Funciona melhor para mim
fonte
-x "*/\__MACOSX"
: ignore __MACOSX como você mencionou.-x "*/\.*"
: ignore qualquer arquivo oculto, como .DS_Store.Além disso, você pode criar o Serviço Automator para facilitar o uso no Finder. Verifique o link abaixo para ver detalhes, se necessário.
Github
fonte
O
zip
utilitário de linha de comando nunca cria um__MACOSX
diretório; portanto, você pode simplesmente executar um comando como este:Na saída abaixo,
a.zip
que eu criei com ozip
utilitário de linha de comando não contém um__MACOSX
diretório, masa 2.zip
que eu criei no Finder.-x .DS_Store
não exclui.DS_Store
arquivos dentro de diretórios, mas-x \*.DS_Store
sim.O arquivo de nível superior de um archive zip com vários arquivos geralmente deve ser um diretório único, porque, caso contrário, alguns utilitários de desarquivamento (como
unzip
e7z
, mas não o Archive Utility, The Unarchiverunar
oudtrx
) não criam um diretório que contenha o arquivos quando o arquivo é extraído, o que geralmente dificulta a localização dos arquivos e, se vários arquivos como esse são extraídos ao mesmo tempo, pode ser difícil dizer quais arquivos pertencem a qual arquivo.O Utilitário de arquivamento cria apenas um
__MACOSX
diretório quando você cria um arquivamento em que pelo menos um arquivo contém metadados, como atributos estendidos, sinalizadores de arquivo ou uma bifurcação de recursos. O__MACOSX
diretório contém arquivos AppleDouble cujo nome de arquivo é iniciado e._
são usados para armazenar metadados específicos do OS X. Ozip
utilitário de linha de comando descarta metadados, como atributos estendidos, sinalizadores de arquivo e bifurcações de recursos, o que também significa que os metadados, como tags, são perdidos e que os alias param de funcionar, porque as informações em um arquivo de alias são armazenadas em uma bifurcação de recursos.Normalmente, você pode simplesmente descartar os metadados específicos do OS X, mas para ver o que os arquivos de metadados contêm, você pode usá-lo
xattr -l
.xattr
também inclui bifurcações de recursos e sinalizadores de arquivo, porque, embora não sejam realmente armazenados como atributos estendidos, eles podem ser acessados através da interface de atributos estendidos. O Archive Utility e ozip
utilitário de linha de comando descartam ACLs.fonte
Você não pode.
Mas o que você pode fazer é excluir as pastas indesejadas após o fechamento. A linha de comando
zip
usa argumentos diferentes, onde um deles-d
é para excluir o conteúdo com base em uma regex. Então você pode usá-lo assim:fonte
não compactar nenhum arquivo oculto:
com esta pergunta, deve ser como:
Deve-se dizer, porém, o comando zip é executado no terminal apenas compactando o arquivo, ele não comprime nenhum outro. Então faça isso o resultado é o mesmo:
fonte
__MACOSX
não começa com.
Você quer dizer a
zip
ferramenta de linha de comando ou o comando Compressor do Finder?Para
zip
, você pode tentar a--data-fork
opção. Se isso não funcionar, você pode tentar--no-extra
, embora isso pareça ignorar outros metadados de arquivo que podem ser valiosos, como uid / gid e tempo de arquivo.Para o comando Compressor do Finder, não acredito que haja opções para controlar seu comportamento. É para o caso simples.
A outra ferramenta, e talvez a que o Finder realmente usa sob o capô, é
ditto
. Com as-c -k
opções, ele cria arquivos zip. Com esta ferramenta, você pode experimentar com--norsrc
,--noextattr
,--noqtn
,--noacl
e / ou simplesmente deixar de fora a--sequesterRsrc
opção (que, de acordo com a página do manual, podem ser responsáveis para o__MACOSX
subdiretório). Embora, talvez a ausência de--sequesterRsrc
simplesmente signifique usar o formato AppleDouble, o que criaria arquivos ._ em todo o lugar, em vez de um__MACOSX
diretório.fonte
Eu tenho uma solução melhor depois de ler todas as respostas existentes. Tudo poderia ser feito por um fluxo de trabalho em um único clique direito. NENHUM software adicional, NENHUM material de linha de comando complicado e NENHUM truque de shell.
O fluxo de trabalho do automator:
Etapa 2: Execute o comando Shell, com entrada como parâmetros. Copie o comando abaixo.
zip -d "$@" "__MACOSX/*" || true
zip -d "$@" "*/.DS_Store" || true
Salve e pronto! Clique com o botão direito do mouse na pasta ou na maioria dos arquivos e escolha o fluxo de trabalho no menu Serviços. O arquivo sem metadados será criado ao lado.
fonte
É assim que evito o
__MACOSX
diretório ao compactar arquivos com otar
comando:$ 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
Exclua o atributo primeiro:
find . | xargs xattr -d com.apple.quarantine
Execute
find . | xargs xattr -l
novamente, verifique se nenhum arquivo possui o atributo xattr. então você está pronto para ir:tar cjvf file.tar.bz2 dir
fonte