簡體   English   中英

bash腳本中的AWS CLI命令無法找到文件

[英]AWS CLI command inside bash script can't locate file

我需要根據一些要求將文件數量從一台服務器移到S3中:

  • 連接斷開時保存傳輸進度
  • 如果連接斷開,下一次運行必須繼續處理未上傳的文件
  • 作為服務運行-TODO

所以這就是我所擁有的,它還不完整,因為從腳本內運行命令時我在定位文件時遇到了問題,而在原始運行命令時卻可以工作。

如何使腳本從此腳本中找到$ 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

如果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' ),則此操作:

$( "$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'

相反,您想使用參數s3cp/var/www/files/folder/file1.mp4 s3://s3-public/folder/file1.mp4s3://s3-public/folder/file1.mp4來調用aws程序:

command=(aws s3 cp "$source" "$aws_bucket$destination")

echo "${command[@]}"
"${command[@]}" &

(其中parameter_name =( value value value value )表示法將名為parameter_name的參數設置為包含指定值的數組變量 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM