¿En qué se diferencia cp -f de cp --remove-destination?

¿En qué se diferencia cp -f de cp --remove-destination?

en la página de manual de cp, enumera la opción -f/--force como: si un archivo de destino existente no se puede abrir, elimínelo y vuelva a intentarlo

para la opción --remove-destination dice: elimine cada archivo de destino existente antes de intentar abrirlo (en contraste con --force)

Entonces, el primero verifica primero si se puede abrir; si no, lo elimina de todos modos, mientras que el segundo simplemente omite ese paso. Combiné cada uno con la opción -i y, en ambos casos, indica cuáles son los permisos del archivo si está protegido contra escritura.

Este último parecería ser más eficiente, especialmente si se copia/sobrescribe recursivamente directorios grandes, pero ¿por qué mantener ambas opciones? ¿Cuál es la ventaja de marcar algo que se va a anular de todos modos?

Respuesta1

Hay una distinción entre los dos (el énfasis es mío):

siun archivo de destino existente no se puede abrir, elimínelo e intente nuevamente
eliminar cada archivo de destino existenteantes de intentar abrirlo

En el primer caso, si el archivo se puede abrir, cpintentará reemplazar sólo el contenido. cpNo eliminará el archivo innecesariamente. Esto conservará los permisos y la propiedad del archivo original a menos que especifique que también se copiarán.

El segundo caso es útil cuando el contenido no se puede leer (comoenlaces simbólicos colgantes).

Respuesta2

y: en caso de que el archivo de destino tenga múltiples enlaces (hardlinks), --remove-destination no destruirá el contenido de los otros enlaces. En lugar de eso, solo se elimina el enlace del destino (ahora sabemos por qué "eliminar" se llama "desvincular" en funciones más profundas del sistema) y se crea un nuevo archivo con un nuevo inodo.

información relacionada