Actualmente sé cómo copiar archivos que no existen en el directorio de destino. Esto me permite copiar de src
a dst
como me gustaría.
Sin embargo, ahora quiero copiar de src
a dst/2016-01-05
, pero sólo en los archivos src
que no existen en cualquier lugar dentro dst
.
Ejemplo
Supongamos que la situación de inicio es
src/f1.txt
src/f2.txt
src/f3.txt
dst/2016-01-04/f1.txt
dst/2016-01-05/f0.txt
Luego, después de hacer la copia, la situación final debería ser:
src/f1.txt
src/f2.txt
src/f3.txt
dst/2016-01-04/f1.txt
dst/2016-01-05/f0.txt
dst/2016-01-05/f2.txt
dst/2016-01-05/f3.txt
En general, no me gustaría sobrescribir los archivos existentes. Incluso si la fuente se actualiza.
src/
? Si es así, ¿cómo se manejandst/
? ¿Está el directorio codificado por fecha inmediatamente debajodst/
o entre el directorio de origen y el archivo de destino?src
. En eldst
directorio, crearé una carpeta con la fecha actual, por ejemplodst/2016-01-04
, y pondré todos los archivos allí que aún no existíandst
. (No quiero depender de cuánto tiempo han existido los archivossrc
)Respuestas:
Lo siguiente debería hacer el truco: -
Notas:
for f in src/*; ...
, el usols
elimina el directorio del nombre de origen e-A
incluye los nombres de archivo que comienzan con.
,.src/
, deberá usarlosfind
en el directorio de origen y quitarsrc/
el nombre con-printf %P\\n
.line
comando que puede usarwhile read f; ...
, pero esto no funciona para los nombres de archivo con espacios en blanco iniciales y finales (inclusoline
falla si el nombre del archivo contiene un carácter de nueva línea; para esto necesitaría usarfind -print0
yxargs -0
).fuente