Copie uma lista de arquivos para o computador remoto enquanto cria pastas pai

4

Eu tenho uma lista de arquivos em subdiretórios que criei chamando find :

for f in $(find . -name "myFile.txt"); do 
    echo "$f" >> filelist.txt;
done

O conteúdo de filelist.txt é assim:

./First/Path/To/File/myFile.txt
./Second/Path/To/File/myFile.txt
./Third/Path/To/File/myFile.txt
...

Agora, quero copiar todos esses arquivos para um computador remoto, de forma que eles sejam colocados nas pastas correspondentes:

remoteComputerName:/some/root/directory/First/Path/To/File/myFile.txt
remoteComputerName:/some/root/directory/Second/Path/To/File/myFile.txt
remoteComputerName:/some/root/directory/Third/Path/To/File/myFile.txt

No entanto, no computador remoto, a estrutura de pastas First/Path/To/File/ etc, ainda não existe e também não quero copiar os diretórios inteiros, mas apenas o arquivo myFile.txt .

Eu sei que em um computador local isso funciona usando o comando

while read p; do cp --parents $p /some/root/directory ; done < filelist.txt

No entanto, para computadores remotos que usam scp , essa opção --parents não funciona mais. Também rsync não cria um diretório pai se estiver faltando. Alguém conhece uma solução?

    
por mcExchange 28.03.2016 / 14:02

1 resposta

5

Usando rsync :

rsync -av --files-from=filelist.txt . remote:/some/location/

Execute isso no diretório em que você executou find , a raiz dos diretórios, onde o filelist.txt está atualmente.

--files-from lê arquivos (separados por nova linha) para serem copiados do arquivo filelist.txt .

--files-from deve sempre usar o caminho relativo (ao contrário de mencionar diretamente), embora você possa ser explícito sobre isso:

rsync -av --relative --files-from=filelist.txt . remote:/some/location/
    
por heemayl 28.03.2016 / 14:54