2017-06-01 109 views
0

我需要從一個服務器遷移文件的數量爲S3的一些要求:當連接中斷 bash腳本里面AWS CLI命令無法找到文件

  • 在連接中斷的情況下,

    • 保存傳輸進度,下次運行必須與非上傳的文件繼續
    • 運行的服務 - TODO

    所以這是我,這是不完全的,因爲我在與運行命令時,定位文件的問題從機智hin腳本,但命令工作原始運行時。

    如何讓腳本從這個腳本中找到$ source文件?另外,有沒有更好的方法來做到這一點?

    命令:

    aws s3 cp '/var/www/files/folder/file1.mp4' 's3://s3-public/folder/file1.mp4' 
    

    錯誤:

    script.sh: line 20: aws s3 cp '/var/www/files/folder/file1.mp4' 's3://s3-public/folder/file1.mp4': No such file or directory 
    

    代碼:

    #!/bin/bash 
    
    aws_bucket='s3://s3-public/' 
    home='/home/user/' 
    files='/var/www/files/' 
    input="${home}videos_list.txt" 
    output="${home}videos_done.txt" 
    
    videos_list='()' 
    videos_done='()' 
    
    arrays_hydrate() { 
        mapfile -t videos_list < "$input" 
        mapfile -t videos_done < "$output" 
    } 
    
    aws_init() { 
        for index in "${!videos_list[@]}" 
        do 
         source="${videos_list[$index]}" 
         destination=$(echo "${videos_list[$index]}" | sed -e "s#^$files##") 
         length="${#source}" 
    
         if [ "$length" -ne "0" ]; then 
          command="aws s3 cp '${source}' '${aws_bucket}${destination}'" 
    
          echo "$command" 
          $("$command") & 
         fi 
        done 
    } 
    
    init() { 
        arrays_hydrate 
        aws_init 
    } 
    
    init 
    
    exit 0 
    
  • +0

    @ruakh,關於你的編輯歷史的問題。 Rev.2中的評論是錯誤的,或者這篇文章是否應該清理一下? – HelpNeeder

    +1

    我回滾了我的編輯,因爲代碼轉儲的*部分*是必要的,這樣才能使問題變得有意義。但是你仍然應該按照https://stackoverflow.com/help/mcve編輯問題;你發佈了比相關更多的代碼。 – ruakh

    回答

    1

    如果command參數包含aws s3 cp '/var/www/files/folder/file1.mp4' 's3://s3-public/folder/file1.mp4'(如你所做的),那麼這樣的:

    $("$command") & 
    

    是相同的:

    $("aws s3 cp '/var/www/files/folder/file1.mp4' 's3://s3-public/folder/file1.mp4'") & 
    

    這顯然不是你想要的:你沒有命名aws s3 cp '/var/www/files/folder/file1.mp4' 's3://s3-public/folder/file1.mp4'任何程序。

    相反,你要撥打的aws方案的論據s3cp/var/www/files/folder/file1.mp4s3://s3-public/folder/file1.mp4

    command=(aws s3 cp "$source" "$aws_bucket$destination") 
    
    echo "${command[@]}" 
    "${command[@]}" & 
    

    (其中parameter_name=(valuevaluevaluevalue)符號設置名爲parameter_name的參數是包含數組變量指定的值)。

    +0

    好注意,謝謝。我明天早上會試一試。 – HelpNeeder

    +0

    這工作就像一個魅力,謝謝。 – HelpNeeder