gpt4 book ai didi

linux - bash 脚本中的 AWS CLI 命令找不到文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:14 24 4
gpt4 key购买 nike

我需要将一些文件从一台服务器移动到 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' (和你一样),然后这个:

$( "$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带有参数的程序 s3 , cp , /var/www/files/folder/file1.mp4 , 和 s3://s3-public/folder/file1.mp4 :

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

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

(其中 <em>parameter_name</em>=(<em>value</em> <em>value</em> <em>value</em> <em>value</em>) 符号将名为 <em>parameter_name</em> 的参数设置为包含指定值的数组变量)。

关于linux - bash 脚本中的 AWS CLI 命令找不到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44296729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com