2017-08-28 44 views
0

我有一个问题,我完全无法弄清楚。RClone/Bash - 循环并下载目录中的所有文件

我有RClone设置和CentOS上运行,我试图写一个脚本做以下

  • 名单目录中的所有文件(rclone LS MsOneDrive:/ Dashcam /保存)
  • 下载每个文件一次一个
  • 上的每个文件运行一个命令
  • 重新上传文件
  • 删除原始

当我执行

rclone ls MsOneDrive:/Dashcam/Saved 

我得到如下的一个更长的版本。其中,数字是文件大小,第二部分是文件名。

E.G. “文件大小filename.AVI”

 
511810664 00200367.AVI 
509582440 01560041.AVI 
86225016 03510005.AVI 
    8389816 03580007.AVI 
503356520 05220203.AVI 
502537320 06320079.AVI 
508238952 06320080.AVI

有什么办法来解析成一个foreach循环或类似的东西,它可以让我执行循环内的操作呢?

这样做,这是你可以计算出总的
#!/bin/bash 
while read -r size name; do 
    rclone copy $name <local> 
    (($(stat -c %s <local>) == size)) || { echo ERROR; exit; } 

    localOperation 
    rclone copy <local> <remote> 
    rclone rm <remote> 
done < <(rclone ls MsOneDrive:/Dashcam/Saved) 

优势一:

沿(忽略foreach循环的语法)

#!/bin/bash 
foreach {i} (rclone ls MsOneDrive:/Dashcam/Saved) 
    rclone copy $i <local> 
    localOperation 
    rclone copy <local> <remote> 
    rclone rm <remote> 
fi 
+1

这些文件的名字是否真的有空格,即'508238952 06320080.AVI'?请更新您的Q与这个信息和**不**在评论中回应。 (然后我可以删除这条评论)。祝你好运。 – shellter

回答

1

你可以使用类似这样的东西线:

#!/bin/bash 
total=0 
while read -r size name; do 
    ((total+=size)) 
    .... 
done < <(rclone ls MsOneDrive:/Dashcam/Saved) 
printf "Total processed: %u.\n" $total 
+0

如果*名称*可能包含空格,则可能必须使用引号和/或双引号! –

相关问题