2017-08-28 121 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

如果*名稱*可能包含空格,則可能必須使用引號和/或雙引號! –

相關問題