Ruta original, RootFolderI:
RootFolderI/FolderA/Subfolder1/Subsub1/JPG1.jpg -> want this jpg
RootFolderI/FolderA/Subfolder2/Subsub1/JPG2.jpg -> want this jpg
RootFolderI/FolderA/Subfolder2/Subsub2/JPG3.jpg
. . .
RootFolderI/FolderB/Subfolder1/Subsub1/JPG4.jpg -> want this jpg
RootFolderI/FolderB/Subfolder2/Subsub1/JPG5.jpg -> want this jpg
RootFolderI/FolderB/Subfolder3/Subsub2/JPG6.jpg
...
Hay muchas carpetas CarpetaA/B/C/etc, pero la estructura de las carpetas dentro es siempre la misma (excepto los archivos, son diferentes)
Quiero copiar a RootFolderII
:
- solo toda la Carpeta A/B/etc.
- todos los archivos en Subsub1
...El resultado es esta nueva ruta, RootFolderII:
RootFolderII/FolderA/ with JPG1.jpg, JPG2.jpg
RootFolderII/FolderB/ with JPG4.jpg,JPG5.jpg
En este momento tengo el siguiente código (pero no funciona):
rsync -r --include='Folder*/Subfolder1/Subsub1/***' --exclude="/*/*/" /RootFolderI/ /RootFolderII/
Dónde
--exclude="/*/*/"
: crea CarpetaA/B/... -> trabajando
--include='Folder*/Subfolder1/Subsub1/***'
: quiero copiar todos los archivos (no la estructura)... -> no funciona
???
bueno, creo que incluso si funcionara, copiaría archivos de la Carpeta B a la Carpeta A, ¡y no quiero eso!
Respuesta1
Dale una oportunidad a esto.
rsync -r --include='*.jpg' --exclude="*" /RootFolderI/Folder*/Subfolder1/Subsub1/. /RootFolderII/.
Respuesta2
Lo que hice:
rsync
con incluye y excluyeMover archivos hacia arriba (2 niveles arriba)
find /folder/ -type f -mindepth 3 -execdir mv -t ../../ -- {} +
Eliminar carpetas vacías
find /folder/*/ -type d -empty -delete
Respuesta3
No creo que lo usaría rsync
para esta tarea. (No existe un algoritmo delta, por lo que se puede ganar poco usándolo). Aquí hay una versión que usa cp
:
for rfipath in RootFolderI/*
do
folder="${rfipath/*\/}"
mkdir -p "RootFolderII/$folder"
cp -p "$rfipath"/*/Subsub1/* "RootFolderII/$folder"
done
Producción
RootFolderII/FolderA/JPG1.jpg
RootFolderII/FolderA/JPG2.jpg
RootFolderII/FolderB/JPG4.jpg
RootFolderII/FolderB/JPG5.jpg
Si realmente quieres usar rsync
, reemplaza la cp
línea con esta. Obtendrá los tiempos de modificación de los directorios:
for folder in RootFolderI/*
do
rsync -a "$folder"/*/Subsub1/ "RootFolderII/${folder/*\/}"
done