¿Cómo uso 'cp' para sobrescribir archivos?

10

Usando un script de shell o Terminal, ¿cómo sobrescribo los archivos que pueden o no estar presentes? Miré la página del manual para cp, decía usar el argumento -f para forzar la sobrescritura. Pero no hace nada.

$ cp -f /path/to/source/file.txt /path/to/target

¿O hay otra opción para sobrescribir archivos usando las herramientas de línea de comandos incorporadas comunes en OS X?

rogerFernand
fuente
3
Esto funciona para mi. ¿Qué está haciendo en lugar de sobrescribir cuando lo intentas?
Gordon Davisson
2
Si no tiene permiso para sobrescribir el archivo de destino, esto fallará. Si realmente desea sobrescribir un archivo de destino, puede usarlo sudoal comienzo del comando. ¡Pero úsalo con precaución!
Daniel
@ Gordon Davisson: ¿Qué está haciendo? nada. Solo copiará los archivos al directorio de destino si yo mvo rmellos.
rogerFernand
@Daniel Lawson: Sin usar sudopuedo usar mvo rmmover o eliminar archivos antes de usar cp. Usar sudo cpno hace ninguna diferencia.
rogerFernand
Más curioso y más curioso.
Daniel

Respuestas:

14

Estoy perplejo de por qué cp se comporta de esta manera si no hay un alias involucrado. Sin embargo, hay una utilidad rápida sucia y peligrosa previsto esta situación exacta: yes. Puede usarlo para canalizar una secuencia continua de afirmativos en cualquier comando que le brinde indicaciones de confirmación (puede usarlo para enviar cualquier texto, pero el valor predeterminado es "y").

yes | cp foo bar ejecutará el comando cp y omitirá todas las indicaciones de confirmación.

octern
fuente
8

Puede ser causado por un alias de comando.

Para llamar cpdirectamente puedes usar/bin/cp src dest

Aji
fuente
1
No estoy seguro de por qué esto fue rechazado. Tenía la impresión de que especificar explícitamente -f anularía -i en el alias, pero lo comprobé y no lo hace. El póster debe averiguar si tienen alias cp (tipo alias cp). Pueden cambiar el alias en su perfil o usar / bin / cp como se sugiere.
octern
Estoy usando el valor predeterminado cpcomo Apple lo proporcionó.
rogerFernand
@octern:roger$ alias cp -bash: alias: cp: not found
rogerFernand
Tuve que usar / bin / cp No sé por qué.
beingalex
1
Podría llegar demasiado tarde, pero para las personas que vienen del motor de búsqueda pude ver si el comando tenía algún alias al hacerlo type cp. Y de hecho lo hizo.
grito
2
rm foo/bar/destination && cp source foo/bar/destination

Primero elimina ( rm) el destino, luego, si tiene éxito ( &&), realiza la copia. Al eliminar una carpeta, recuerde agregar -ra rm( rm -r).

vtoanb
fuente
1

También tuve un alias jugando con -f, llame a cp directamente desde / bin y todo está bien, tener un alias que evita sobrescrituras / eliminaciones accidentales por defecto es bastante bueno, así que mejor no lo elimine.

.# alias

alias cp = 'cp -i'

como ya se dijo, el indicador -i superceedes -f, que no permitiría que el siguiente comando funcione como se esperaba.

. # / bin / cp -fauv src dst

Niklas Göransson
fuente