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