自分のローカルコンピュータのリモートサーバー上の一部のビデオを変換する必要があります。
私がすることは:
- SSHを使用してファイルリストをインポートする
- ループからアイテムを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"