¿Cómo detener cp: sobrescribir './xxx'? rápido

19

¿Cómo puedo evitar que el comando cp solicite sobrescribir? Quiero sobrescribir todos los archivos sin tener que volver al terminal. Como estos son archivos grandes y tardan un tiempo en completarse.

Intenté usar la opción -f. Todavía me pregunta si quiero sobrescribir.

   -f, --force
          if an existing destination file cannot be opened, remove it and
          try again (redundant if the -n option is used)

cp -f /media/somedir/somefiles* .  
cp: overwrite `./somefilesxxx'? y
nelaaro
fuente

Respuestas:

17

Además de llamar /bin/cp, puede hacer una de:

\cp -f ...
command cp -f ...

Sin embargo, estoy de acuerdo en que no debe acostumbrarse a usar un alias como cp -io rm -i, si se sienta en un caparazón diferente, no tendrá la red de seguridad de la que depende.

Glenn Jackman
fuente
1
A whereis cpmostrará dónde está el comando. Entonces podrá llamar al comando real en lugar del alias.
AnthonyB
12

Después de ver esta solución. Pude ver que la función alias bashes estaba causando los problemas. http://systembash.com/content/prompt-to-confirm-copy-even-with-cp-f/

which cp  
alias cp='cp -i'
/bin/cp
which cp | grep cp
alias cp='cp -i'
/bin/cp

Él recomienda

unalias cp

Todavía quiero mantener el alias, simplemente no quiero que se aplique a esta instancia. Mi solución es usar el binario con una ruta completa, para que la función alias bashes no se haga cargo. Eso funciona bastante bien.

/bin/cp -f /media/somedir/somefiles* .  
nelaaro
fuente
4

Desafortunadamente en Linux, el comando copiar "cp" no tiene una opción para responder automáticamente a esta pregunta con una respuesta "y" o "n". Hay más de una solución a este problema dependiendo de lo que quieras hacer. Una solución es usar el comando "sí" de Unix. Este comando generará una cadena repetidamente hasta que se elimine.

Si queremos sobrescribir todos los archivos en el directorio de destino, puede usar el comando "sí" para responder todas las preguntas con una "y". "y" es un valor predeterminado, por lo que no tiene que especificarse.

yes | cp source/*.txt destination/.

Si queremos evitar sobrescribir cualquiera de los archivos en el directorio de destino, puede usar el comando "sí" para responder todas las preguntas con un no "n".

yes n | cp source/*.txt destination/.

Use "man yes" para obtener más información sobre el comando "yes".

Michael Sundell
fuente