Quiero cpun directorio pero no quiero sobrescribir ningún archivo existente, incluso si son más antiguos que los archivos copiados. Y quiero hacerlo completamente no interactivo ya que esto será parte de un script de Crontab Bash. ¿Algunas ideas?
386

Respuestas:
Tomado de la página del manual :
Ejemplo:
fuente
cp -n source.txt destination.txt || truecp -nno sale con error si el archivo existe en Ubuntu 12.04.Considera usar
rsync.Según los comentarios
rsync -a -v src dstno es correcto porque actualizará los archivos existentes.fuente
--ignore-existingindicador para evitar que se sobrescriban los archivos existentes.rsync -a -v --ignore-existing <src> <dst>es de hecho la respuesta correcta, en lugar de lacp -uanterior.Es lo que quieres Ver la página del manual.
fuente
Esto funcionará en RedHat:
Actualizar y no sobrescribir es algo diferente.
fuente
falseaquí?-ipreguntas.Para las personas que encuentran que no tienen una opción 'n' (como yo en RedHat), puede usar
cp -upara escribir solo el archivo si la fuente es más nueva que la existente (o si no hay una existente).[editar] Como se menciona en los comentarios, esto sobrescribirá los archivos más antiguos, por lo que no es exactamente lo que quería el OP. Use la respuesta de ceving para eso.
fuente
-uque en realidad no se ajusta al propósito.Alpine linux: la respuesta a continuación es solo para el caso de un solo archivo: en alpine
cp -nno funciona (yfalse | cp -i ...también), por lo que la solución que funciona en mi caso que encontré es:En el ejemplo anterior, si
env.jsel archivo no existe, entonces copiamosenv.example.jsaenv.js.fuente
Algunas versiones de cp no tienen la opción --no-clobber . En ese caso:
fuente