我使用 rsync 生成已更改的文件列表,然后使用该列表将文件上传到 s3:
rsync -av somefiles/ someotherfiles/ > list.txt
while read F ; do
echo $F
aws s3 cp $lcDir/$F s3://durktest/blender/$F
done <list.txt
列表中内容的示例
swresample-2.dll
swscale-4.dll
tahoe.log
ucrtbase.dll
vcomp140.dll
vcruntime140.dll
2.78/
2.78/config/
2.78/config/bookmarks.txt
2.78/config/recent-files.txt
2.78/config/userpref.blend
2.78/datafiles/
2.78/datafiles/colormanagement/
2.78/datafiles/colormanagement/config.ocio
2.78/datafiles/colormanagement/filmic/
2.78/datafiles/colormanagement/filmic/filmic_desat65cube.spi3d
2.78/datafiles/colormanagement/filmic/filmic_false_color.spi3d
2.78/datafiles/colormanagement/filmic/filmic_to_0-35_1-30.spi1d
2.78/datafiles/colormanagement/filmic/filmic_to_0-48_1-09.spi1d
2.78/datafiles/colormanagement/filmic/filmic_to_0-60_1-04.spi1d
2.78/datafiles/colormanagement/filmic/filmic_to_0-70_1-03.spi1d
2.78/datafiles/colormanagement/filmic/filmic_to_0-85_1-011.spi1d
2.78/datafiles/colormanagement/filmic/filmic_to_0.99_1-0075.spi1d
2.78/datafiles/colormanagement/filmic/filmic_to_1.20_1-00.spi1d
2.78/datafiles/colormanagement/luts/
2.78/datafiles/colormanagement/luts/aces_to_xyz.spimtx
2.78/datafiles/colormanagement/luts/adx_adx10_to_cdd.spimtx
除了使用保险丝驱动程序并直接与 s3 进行 rsync 之外,还有其他更好的方法吗?
答案1
答案2
要删除以 结尾的行/
,只需使用sed
:
sed '/\/$/d'
它将从标准输入复制到标准输出,删除以/
.或者使用grep
:
grep -v '/$'
可能还有很多其他方式。
答案3
使用 GNU xargs
:
grep -v '/$' list.txt |
xargs -rd '\n' -I@FILE@ aws s3 cp "$lcDir/@FILE@" s3://durktest/blender/@FILE@
(假设$lcDir
不包含@FILE@
)
请注意,您的代码中存在一些问题:
- 你呼唤着,
read
没有空-r
也没有空$IFS
- 你忘了引用
$lcDir
和$F
- 你用过
echo
- 无论如何,使用这种方法,您都会遇到包含换行符的文件名的问题。
如果你确实想使用循环,你可以这样做:
(
ret=0
while IFS= read -r F <&3; do
case $F in
(*/) ;;
(*)
printf '%s\n' "$F"
aws s3 cp "$lcDir/$F" "s3://durktest/blender/$F" || ret=$?;;
esac
done 3< list.txt
exit "$ret"
)
您可能还需要考虑duplicity
哪个 AFAIK 支持 Amazon s3 作为后端。