Unix equivalente do comando para o OS X Finder Duplicate Exatamente

3

Qual comando pode reproduzir essa função no bash?

No Finder, selecione Arquivo e pressione ⇧⌥ para tornar o comando visível (⇧⌥⌘D).

No AppleScript, está disponível como

tell application "Finder" to duplicate selection with exact copy

UPDATE. Eu verifiquei as datas de nascimento com stat.

    
por 1.61803 14.05.2015 / 14:44

1 resposta

5

De acordo com este artigo , a principal diferença entre este e a função de duplicata normal (⌘D) é que a propriedade do arquivo é retida. A função duplicada normal preserva as permissões de arquivo, mas não a propriedade.

O melhor equivalente a esse comportamento no OSX é o ditto comando. Você pode simplesmente usar sudo ditto src dst e ele preservará tudo por padrão. Sudo é necessário se a propriedade do arquivo deve ser preservada. Se você estiver copiando um diretório e dst já existir, saiba que ele será mesclado em vez de criar um novo diretório dst/src . Ditto também é capaz de criar arquivos no formato cpio ou zip, explicados na manpage.

As respostas abaixo são relevantes principalmente para outros sistemas UNIX, e podem não preservar o fork de recursos ou outros atributos específicos do HFS em algumas versões do OSX.

Primeiro, devo mencionar que qualquer um desses comandos só pode preservar a propriedade quando executado como raiz (por exemplo, com sudo ou su dependendo do sistema. O comando sudo existe no OSX.). Quando não são executados como root, a maioria deles preservará todos os atributos que puderem, mas o arquivo pertencerá ao seu ID de usuário.

O comando cp -a preserva o máximo possível, incluindo permissões, propriedade (se raiz), registros de data e hora e links simbólicos. Embora o -a seja suportado em muitos sistemas (ele também preserva hardlinks no GNU, mas não no OSX), ele não está no POSIX. O comando POSIX equivalente mais próximo é cp -pPR - a opção padrão relevante para preservar permissões e a propriedade é p , mas P é necessário para copiar links simbólicos e R para copiar diretórios.

A melhor maneira de copiar, ao mesmo tempo em que preserva hardlinks e outros atributos estendidos que o cp pode não manipular, é usar o comando pax: pax -rwpe src dstdir . Isso não permite alterar o nome do arquivo de origem e o diretório de destino já deve existir. Ele criará uma cópia como dstdir / src, portanto, para resultados ideais, você deve executar isso a partir do diretório onde o arquivo de origem existe.

Em alguns sistemas, o pax pode não existir e, nesse caso, você pode usar o tar: tar cf - srcfiles | (cd dstdir; [sudo] tar xf -) . O mesmo conselho sobre o nome do arquivo e os diretórios de origem e destino se aplica como para pax.

    
por 14.05.2015 / 14:57