我需要在本地计算机上转换远程服务器上的一些视频。
我的做法是:
- 使用 ssh 获取文件列表
- 循环中一项一项下载并处理
问题是这些文件有空格。
我尝试过这种方法
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"