linux - comando - Como forzar a cp a sobrescribir sin confirmación
comando cp linux (14)
-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 fuente
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.
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 desactivará temporalmente cualquier alias que haya llamado cp .
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
Esto probablemente se debe a que cp ya está asociado a algo como cp -i . Llamar directamente a cp 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
No es cp -i . Si no desea que se le solicite confirmación, es cp -n ; por ejemplo:
cp -n src dest
O en el caso de directorios / carpetas es:
cp -nr src_dir dest_dir
Otra forma de llamar al comando sin el alias es usar el command incorporado en bash.
command cp -rf /zzz/zzz/*
Por defecto, cp tiene además a cp -i . Puedes comprobarlo, escribir alias y 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, simplemente use /bin/cp /from /to lugar de comando cp /from /to
Probablemente tengas un alias en algún lugar, mapeando cp a cp -i ; porque con la configuración predeterminada, cp no pedirá que se sobrescriba. Compruebe su .bashrc , su .profile etc.
Consulte la página de manual de cp : Solo cuando se especifique el parámetro -i , cp solicitará antes de sobrescribir.
Puedes 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 -i
Puedes hacer yes | cp -rf xxx yyy yes | cp -rf xxx yyy , pero 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 RH) hacen eso para los perfiles de root.
Puede verificar los alias existentes ejecutando alias en el símbolo del sistema, o en 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
Si desea mantener el alias en el nivel global tal como está y simplemente desea cambiarlo para su script.
Solo usa:
alias cp = cp
y luego escriba sus comandos de seguimiento.
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
También puedes usar este comando:
cp -ru /zzz/zzz/* /xxx/xxx
Aunque actualizaría tu archivo existente con el más nuevo.
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
cp -u ...
cp --update ...
tambien funciona