Caminho 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
...
Existem muitas pastas Pasta A/B/C/etc, mas a estrutura das pastas dentro é sempre a mesma (exceto os arquivos, eles são diferentes)
Quero copiar para RootFolderII
:
- apenas todas as pastas A/B/etc
- todos os arquivos em Subsub1
...O resultado é este novo caminho, RootFolderII:
RootFolderII/FolderA/ with JPG1.jpg, JPG2.jpg
RootFolderII/FolderB/ with JPG4.jpg,JPG5.jpg
Tenho no momento o seguinte código (mas não está funcionando):
rsync -r --include='Folder*/Subfolder1/Subsub1/***' --exclude="/*/*/" /RootFolderI/ /RootFolderII/
Onde
--exclude="/*/*/"
: cria Pasta A/B/... -> funcionando
--include='Folder*/Subfolder1/Subsub1/***'
: quero copiar todos os arquivos (não a estrutura)... -> não está funcionando
???
bem, acho que mesmo que estivesse funcionando, ele copiaria arquivos da Pasta B para a Pasta A, e eu não quero isso!
Responder1
Experimente.
rsync -r --include='*.jpg' --exclude="*" /RootFolderI/Folder*/Subfolder1/Subsub1/. /RootFolderII/.
Responder2
O que eu fiz:
rsync
com inclui e excluiMover arquivos para cima (2 níveis acima)
find /folder/ -type f -mindepth 3 -execdir mv -t ../../ -- {} +
Exclua pastas vazias
find /folder/*/ -type d -empty -delete
Responder3
Eu não acho que usaria rsync
para esta tarefa. (Não há algoritmo delta, então há pouco a ganhar com seu uso.) Aqui está uma versão usando cp
:
for rfipath in RootFolderI/*
do
folder="${rfipath/*\/}"
mkdir -p "RootFolderII/$folder"
cp -p "$rfipath"/*/Subsub1/* "RootFolderII/$folder"
done
Saída
RootFolderII/FolderA/JPG1.jpg
RootFolderII/FolderA/JPG2.jpg
RootFolderII/FolderB/JPG4.jpg
RootFolderII/FolderB/JPG5.jpg
Se você realmente deseja usar rsync
, substitua a cp
linha por esta. Você obterá os tempos de modificação dos diretórios:
for folder in RootFolderI/*
do
rsync -a "$folder"/*/Subsub1/ "RootFolderII/${folder/*\/}"
done