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

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

na página de manual do 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)

Assim, o primeiro verifica primeiro se pode ser aberto, caso contrário, exclui de qualquer maneira, enquanto o último apenas ignora essa etapa. Combinei cada um com a opção -i e, em ambos os casos, indica quais são as permissões dos arquivos se estiverem protegidos contra gravação.

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

Responder1

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

seum arquivo de destino existente não pode ser aberto, remova-o e tente novamente
remover cada arquivo de destino existenteantes de tentar abri-lo

No primeiro caso, se o arquivo puder ser aberto, cptentará substituir apenas o conteúdo. cpnão vai remover o arquivo desnecessariamente. Isso manterá as permissões e propriedades do arquivo original, a menos que você especifique que eles também serão copiados.

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

Responder2

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

informação relacionada