it-swarm.dev

Como forzar a cp a sobrescribir sin confirmación

Estoy tratando de usar el comando cp y forzar una sobrescritura.

He intentado cp -rf /foo/* /bar, pero todavía se me pide que confirme cada sobrescritura.

545
thiyagu114

Puedes hacer yes | cp -rf xxx yyy, pero mi gutfeeling dice que si lo haces como root, tu .bashrc o .profile tiene un alias de cp a cp -i, la mayoría de los sistemas modernos (principalmente derivados de HR) hacen eso a los perfiles de raíz.

Puede verificar los alias existentes ejecutando alias en el símbolo del sistema, o which cp para verificar los alias solo para cp.

Si tiene un alias definido, ejecutar unalias cp lo eliminará para la sesión actual, de lo contrario, puede eliminarlo de su perfil de Shell.

Puede omitir temporalmente un alias y usar la versión sin alias de un comando prefijándolo con \, por ejemplo. \cp whatever

951
favoretti

Esto probablemente se debe a que cp ya está asociado a algo como cp -i. Llamar a cp directamente debería funcionar:

/bin/cp -rf /zzz/zzz/* /xxx/xxx

Otra forma de evitar esto es usar el comando yes:

yes | cp -rf /zzz/zzz/* /xxx/xxx
242
pgl

Como han indicado algunas de las otras respuestas, probablemente utilice un alias en algún lugar que asigne cp a cp -i o algo similar. Puede ejecutar un comando sin ningún alias precediéndolo con una barra invertida. En tu caso, prueba.

\cp -r /zzz/zzz/* /xxx/xxx

La barra invertida inhabilitará temporalmente cualquier alias que haya llamado cp.

101
Chris

Probablemente tengas un alias en alguna parte, mapeando cp a cp -i; porque con la configuración predeterminada, cp no pedirá que se sobrescriba. Compruebe su .bashrc, su .profile etc.

Consulte página de manual de cp : Sólo cuando se especifique el parámetro -i, cp en realidad Solicitará antes de sobrescribir.

Puede verificar esto a través del comando alias:

$ alias
alias cp='cp -i'
alias diff='diff -u'
....

Para anular la definición del alias, use:

$ unalias cp
52
codeling

Como han indicado otras respuestas, esto podría ocurrir si cp es un alias de cp -i.

Puede agregar un \ antes del comando cp para usarlo sin alias.

\cp -fR source target
41
Arnold Roa

De forma predeterminada, cp tiene aliase a cp -i. Puede verificarlo, escriba alias y puede ver algunos como:

alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'

Para resolver este problema, use el comando /bin/cp /from /to en lugar de cp /from /to

18
Avseiytsev Dmitriy

cp suele tener un alias como este

alias cp='cp -i'   # i.e. ask questions of overwriting

si está seguro de que desea realizar la sobrescritura, utilice esto:

/bin/cp <arguments here> src dest
8
user5035029
cp -u ...
cp --update ...

tambien funciona.

6
softwarevamp

también puedes usar este comando:

cp -ru /zzz/zzz/* /xxx/xxx

aunque actualizaría tu archivo existente con el más nuevo.

5
sigeje

Otra forma de llamar al comando sin el alias es usar el command incorporado en bash.

command cp -rf /zzz/zzz/*

4
Steve Buzonas
4

Si desea mantener el alias en el nivel global tal como está y solo desea cambiarlo para su script.

Solo usa:

alias cp = cp

y luego escriba sus comandos de seguimiento.

2
Ankit Bhatnagar

-n es "no sobrescribir", pero su pregunta es totalmente opuesta a lo que respondiste.

Para evitar esta confirmación, simplemente ejecute el comando cp con una ruta absoluta, evitará el alias.

/bin/cp destino del archivo de origen

2
Rohit Rajput

Simplemente usé unalias para eliminar el alias "cp -i", luego hacer la copia y luego volver a establecer el alias. :

unalias cp  
cp -f foo foo.copy  
alias cp="cp -i"  

No es el código más hermoso, pero es fácil de configurar y eficiente. También compruebo que el alias ya está retrasado con un simple

alias |grep cp
0
Maat