リモートサーバー上のファイルをローカルに繰り返します。

リモートサーバー上のファイルをローカルに繰り返します。

自分のローカルコンピュータのリモートサーバー上の一部のビデオを変換する必要があります。

私がすることは:

  1. SSHを使用してファイルリストをインポートする
  2. ループからアイテムを1つずつダウンロードして処理します。

問題は、これらのファイルにスペースがあることです。

私はこのアプローチを試しました

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

しかし、まだ動作しません。単一のファイル名は、次のように3つの部分に分けられます。

My super very
long filename
is splitted

最良のアプローチは何ですか?

答え1

名前を引用してくださいエルエスそしてbash配列を使用して:

#!/usr/bin/env bash

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

エルエスオプション

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

またはあなたが持っているなら同期:

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

答え2

whileこの文字列をループで使用することもできます。

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

while read f 
do 
    echo "${f}"
done <<< "$filels"

関連情報