在本地循环访问远程服务器上的文件

在本地循环访问远程服务器上的文件

我需要在本地计算机上转换远程服务器上的一些视频。

我的做法是:

  1. 使用 ssh 获取文件列表
  2. 循环中一项一项下载并处理

问题是这些文件有空格。

我尝试过这种方法

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

尝试引用名称LS并使用 bash 数组:

#!/usr/bin/env bash

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

LS选项

-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"

相关内容