Linux cómo copiar pero no sobrescribir?
Quiero cp
un directorio, pero no quiero sobrescribir ningún archivo existente, incluso si son más antiguos que los archivos copiados. Y quiero hacerlo completamente noniteractive como esto será una parte de un guion de Crontab Bash. Alguna idea?
6 answers
Tomado de la página de manual :
-n, --no-clobber
do not overwrite an existing file (overrides a previous -i option)
Ejemplo:
cp -n myoldfile.txt mycopiedfile.txt
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-26 18:56:30
Considere usar rsync
.
rsync -a -v --ignore-existing src dst
Según los comentarios rsync -a -v src dst
no es correcto porque actualizará los archivos existentes.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-17 13:51:11
cp -n
Es lo que quieres. Vea la página de manual.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-22 10:11:25
Para las personas que encuentran que no tienen una opción 'n' (como yo en RedHat), puede usar cp -u
para escribir el archivo solo si la fuente es más reciente que la existente (o no hay una existente).
[editar] Como se mencionó en los comentarios, esto sobrescribirá archivos antiguos, por lo que no es exactamente lo que el OP quería. Usa la respuesta de Ceving para eso.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-19 15:21:28
Esto funcionará en RedHat:
false | cp -i source destination 2>/dev/null
Actualización y no sobrescribir es algo diferente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-15 09:20:21
Alpine linux: La respuesta a continuación es solo para el caso de un solo archivo: en alpine cp -n
no funciona (y false | cp -i ...
también), por lo que la solución que funciona en mi caso que encontré es:
if [ ! -f env.js ]; then cp env.example.js env.js; fi
En el ejemplo anterior comprobamos si existe el archivo env.js
y si no, copiamos env.example.js
como env.js
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-24 15:56:47