como cp -f é diferente de cp --remove-destination?

4

na página man cp, ele lista a opção -f / - force como: se um arquivo de destino existente não puder ser aberto, remova-o e tente novamente

para a opção --remove-destination diz:  remova cada arquivo de destino existente antes de tentar abri-lo (contraste com --force)

Portanto, o primeiro primeiro verifica se ele pode ser aberto; caso contrário, será excluído de qualquer maneira, enquanto o segundo apenas ignora essa etapa. Eu combinei cada um com a opção -i e, em ambos os casos, indica quais são as permissões dos arquivos se ele estiver protegido contra gravação.

O último parece ser mais eficiente, especialmente se recursivamente copiar / sobrescrever diretórios grandes, mas por que manter as duas opções? Qual é a vantagem de verificar algo que vai atrapalhar de qualquer maneira?

    
por anotherguy 08.01.2015 / 23:07

2 respostas

5

Há uma distinção entre os dois (ênfase minha):

if an existing destination file cannot be opened, remove it and try again
remove each existing destination file before attempting to open it

No primeiro caso, se o arquivo puder ser aberto, cp tentará substituir apenas o conteúdo. cp não removerá o arquivo desnecessariamente. Isso manterá as permissões e as propriedades do arquivo original, a menos que você especifique que elas também serão copiadas.

O segundo caso é útil quando o conteúdo não pode ser lido (como links simbólicos ).

    
por 08.01.2015 / 23:18
3

e: no caso do arquivo de destino ter vários links (hardlinks), --remove-destination não destruirá o conteúdo dos outros links. Em vez disso, apenas o link do destino é removido (agora sabemos, porque "remove" é chamado de "unlink" em funções mais profundas do sistema) e um novo arquivo com um novo inode é criado.

    
por 23.02.2017 / 19:49

Tags