Estoy tratando de usar el cp
comando y forzar una sobrescritura.
Lo he intentado cp -rf /foo/* /bar
, pero todavía se me pide que confirme cada sobrescritura.
Estoy tratando de usar el cp
comando y forzar una sobrescritura.
Lo he intentado cp -rf /foo/* /bar
, pero todavía se me pide que confirme cada sobrescritura.
Respuestas:
Puede hacerlo yes | cp -rf xxx yyy
, pero mi gutfeeling dice que si lo hace como root - su .bashrc
o .profile
tiene un alias de cp
a cp -i
, los sistemas más modernos (principalmente RH-derivados) que hacen a los perfiles de raíz.
Puede verificar los alias existentes ejecutando alias
en el símbolo del sistema, o which cp
para verificar solo los alias cp
.
Si tiene un alias definido, la ejecución unalias cp
eliminará eso 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 con el prefijo \
, p. Ej.\cp whatever
¯\_(ツ)_/¯
respecto.
(primarily RH-derivatives)
comentario :)
unalias cp
y copiar lo que necesite copiar, puede volver a establecer el alias a su valor predeterminado haciendo alias cp='cp -i'
. Después de lo cual, ejecute alias cp
para que pueda verificar que ha vuelto al alias predeterminado.
Esto probablemente es causado por cp
estar alias a algo así cp -i
. Llamar cp
directamente debería funcionar:
/bin/cp -rf /zzz/zzz/* /xxx/xxx
Otra forma de evitar esto es usar el yes
comando:
yes | cp -rf /zzz/zzz/* /xxx/xxx
yes
comando. Divertidísimo. Y algún día puedo usarlo.
Como algunas de las otras respuestas han dicho, es probable que utilice un alias en algún lugar que se asigna cp
a cp -i
o algo similar. Puede ejecutar un comando sin ningún alias precediéndolo con una barra diagonal inversa. En tu caso, intenta
\cp -r /zzz/zzz/* /xxx/xxx
La barra invertida desactivará temporalmente cualquier alias que haya llamado cp
.
cp
, \cp
invocará el comando cp
. Esto parece ser el equivalente de correr command cp
.
Probablemente tengas un alias en alguna parte, asignando cp
a cp -i
; porque con la configuración predeterminada, cp
no pedirá sobrescribir. Comprueba tu .bashrc
, tu .profile
etc.
Consulte la página de manual de cp : solo cuando -i
se especifique el parámetro, se cp
solicitará antes de sobrescribir.
Puede verificar esto mediante el alias
comando:
$ alias
alias cp='cp -i'
alias diff='diff -u'
....
Para definir el alias, use:
$ unalias cp
Como han dicho otras respuestas, esto podría suceder si cp
es un alias de cp -i
.
Puede agregar un \
antes del cp
comando para usarlo sin alias.
\cp -fR source target
Por defecto cp
tiene aliase a cp -i
. Puede verificarlo, escribir 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, simplemente use el /bin/cp /from /to
comandocp /from /to
cp
generalmente tiene un alias como este
alias cp='cp -i' # i.e. ask questions of overwriting
si está seguro de que desea sobrescribir, use esto:
/bin/cp <arguments here> src dest
encontré esto
'cp' -rf * /data/danalonso_testing/target/
Fuente: /superuser/358843/how-to-replace-all-the-contents-from-one-folder-with-another-one/358851
Así que me encuentro mucho con esto porque sigo alias cp cp -iv
, y encontré un buen truco. Resulta que mientras -i
y -n
tanto cancelar directivas de sobreescritura anteriores, -f
no lo hace. Sin embargo, si lo usa -nf
agrega la capacidad de borrar el -i
. Entonces:
cp -f /foo/* /bar <-- Prompt
cp -nf /foo/* /bar <-- No Prompt
Bastante bien, ¿eh? / necropost
cp -u ...
cp --update ...
También funciona.
Otra forma de llamar al comando sin el alias es usar el command
builtin en bash.
command cp -rf /zzz/zzz/*
-n es "no sobreescribir" pero su pregunta es totalmente opuesta a lo que respondiste.
Para evitar esta confirmación, simplemente puede ejecutar el comando cp con la ruta absoluta, evitará el alias.
/ bin / cp destino del archivo fuente
Si desea mantener el alias a nivel global tal como está y solo desea cambiar su script.
Solo usa:
alias cp = cp
y luego escribe tus comandos de seguimiento.
Simplemente utilicé unalias para eliminar el alias "cp -i", luego hice la copia y luego volví a configurar el alias. :
unalias cp
cp -f foo foo.copy
alias cp="cp -i"
No es el código más bonito, pero fácil de configurar y eficiente. También verifico que el alias ya está retrasado con un simple
alias |grep cp
No es cp -i
. Si no desea que se le pida 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
cp -i
, lo que significa que estaban tratando de superar el valor predeterminado y forzar una sobrescritura. Parece que puede haber confundido que por ser la sintaxis sugerido, pero -n
será evitar una sobrescritura.