Rsync para copiar subpastas e arquivos específicos para o novo diretório

0

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 FolderA / B / C / etc, mas a estrutura das pastas dentro é sempre a mesma (exceto os arquivos, eles são diferentes)

Eu quero copiar para RootFolderII :

  • apenas todo o FolderA / B / etc
  • todos os arquivos no Subsub1

... O resultado é esse novo caminho, RootFolderII:

RootFolderII/FolderA/ with JPG1.jpg, JPG2.jpg
RootFolderII/FolderB/ with JPG4.jpg,JPG5.jpg

Eu tenho no momento o seguinte código (mas não está funcionando):

rsync -r --include='Folder*/Subfolder1/Subsub1/***' --exclude="/*/*/" /RootFolderI/ /RootFolderII/

Onde

--exclude="/*/*/" : cria FolderA / B / ... - > trabalhando

--include='Folder*/Subfolder1/Subsub1/***' : eu quero copiar todos os arquivos (não a estrutura) ... - > não está funcionando

??? bem, acho que mesmo que estivesse funcionando, ele copiaria arquivos do FolderB para o FolderA, e eu não quero isso!

    
por blocnt 22.06.2016 / 13:39

3 respostas

1

Dê uma chance a isso.

rsync -r --include='*.jpg' --exclude="*" /RootFolderI/Folder*/Subfolder1/Subsub1/. /RootFolderII/.
    
por 22.06.2016 / 13:54
1

O que eu fiz:

  • rsync com inclusão e exclusão

  • Mover arquivos para cima (2level para cima)

    find /folder/ -type f -mindepth 3 -execdir mv -t ../../ -- {} +
    
  • Excluir pastas vazias

    find /folder/*/ -type d -empty -delete
    
por 03.08.2016 / 14:05
1

Eu não acho que usaria rsync para essa tarefa. (Não há algoritmo delta, tão pouco a ser ganho usando-o.) 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 quiser usar rsync , substitua a linha cp por essa. Você ganhará os tempos de modificação dos diretórios:

for folder in RootFolderI/*
do
    rsync -a "$folder"/*/Subsub1/ "RootFolderII/${folder/*\/}"
done
    
por 03.08.2016 / 15:34