Faz loop localmente através de arquivos no servidor remoto

0

Eu preciso converter na minha máquina local alguns vídeos que residem em um servidor remoto.

Minha abordagem é:

  1. Use ssh para obter uma lista de arquivos
  2. Faça o download de um por um no loop e processe-o

O problema é que esses arquivos têm espaços em branco.

Eu tentei essa abordagem

filels='ssh $USER@$SERVER ls "$FOLDER*.avi"'
IFS='\n'
for f in $filels; do
    echo "$f"
done

Mas ainda assim não funciona. Um único nome de arquivo é dividido em 3 partes assim:

My super very
long filename
is splitted

Qual é a melhor maneira de proceder?

    
por Simone Gaiarin 28.10.2017 / 10:34

2 respostas

0

Tente citar nomes com ls e use o bash array:

#!/usr/bin/env bash

filels="( $(ssh $USER@$SERVER ls -Q "$FOLDER*.avi") )"
IFS='\n' for f in $filels; do
echo "$f" done
Opção

ls

-Q, --quote-name
          enclose entry names in double
          quotes

Ou se você tiver rsync :

~$ rsync -var --progress $USER@$SERVER:/PATH_TO_FOLDER/*avi ./
# do anything with files
    
por 28.10.2017 / 11:39
0

Você também pode usar uma string aqui em combinação com um loop while .

filels='ssh $USER@$SERVER ls "$FOLDER*.avi"'

while read f 
do 
    echo "${f}"
done <<< "$filels"
    
por 28.10.2017 / 17:21

Tags