rsync todos os arquivos recursivamente - exclui todas as pastas (mas não seu conteúdo)

0

Eu tenho uma pasta chamada files que contém muitas subpastas.

Essa subpasta possui arquivos de vídeo ou outra pasta com arquivos de vídeo.

Portanto, a estrutura da árvore é algo assim:

subfolder/video.mp4
subfolder2/video1.mp4
subfolder2/anothersubfolder/video2.mp4

Agora quero copiar todos os arquivos de vídeo com rsync para minha pasta vids , somente os arquivos de vídeo. Eu não consigo descobrir como fazer isso.

Isso é o que eu tentei:

rsync -avztr --delete /home/pi/ftp/data/files/ /home/pi/vids/ --include=*.mp4 --include=*.m4v --exclude=*/

Alguém pode me apontar na direção certa?

Parece que toda vez que tento excluir uma pasta, não consigo colocar os arquivos na pasta - o que faz sentido.

    
por Bolli 17.11.2017 / 18:25

1 resposta

2

Eu proponho criar primeiro um diretório local, plano e local, preenchido apenas com links simbólicos (você poderia até mesmo preenchê-lo com hardlinks se estiver no mesmo sistema de arquivos) para os arquivos reais, então rsync ao invés do "original", usando a opção -L para transferir o arquivo atual, não o link simbólico.

#!/bin/sh

rm -rf /home/pi/staging
mkdir /home/pi/staging
find /home/pi/ftp/data/files -type f '(' -name '*.mp4' -o -name '*.m4v' ')' -print0 | xargs -0r ln -s -t /home/pi/staging
# rsync -a = rsync -rlptgoD but -L is needed instead of -l. Perhaps -aL has the same effect as -rLptgoD
rsync -rLptgoDvztr --delete /home/pi/staging/ /home/pi/vids/ --include='*.mp4' --include='*.m4v'

A propósito, isso não funcionará em caso de colisão com vários arquivos em diferentes subdiretórios com o mesmo nome (aqui ln -s irá reclamar), mas isso está fora do escopo da questão.

    
por 17.11.2017 / 19:30