我有一个shell脚本正在复制本地的S3存储桶(aws)的一些文件,然后它将它复制到另一个地方(由于某些授权,它不能直接执行),但这个想法是图像可能在某个文件夹中,而shell正在本地创建它,但它只删除图像,我发现执行后我有一些空文件夹。所以我的问题是如何删除文件夹,如果它出现在名称中?
我复制和删除的shell部分:
aws s3 cp s3://$SRC_BUCKET/$PHOTO_NAME $PHOTO_NAME --profile $SRC_PROFILE
# copy to other place
rm $PHOTO_NAME # here PHOTO_NAME may have the parent folder in it (a.jpg,
# or b/a.jpg) and I would like to delete the b folder too
我已根据下面的答案更新了我的代码,但似乎没有做到预期的结果:临时目录已创建,但所有内容都在其外部完成...我的代码如下所示:
dir="$(mktemp aws-sync-XXXXX)"
pushd "$dir"
COUNT=1
until [ $COUNT -gt $MAX_COUNT ]; do
aws s3 cp s3://$SRC_BUCKET/$PHOTO_NAME $PHOTO_NAME --profile $SRC_PROFILE
# copy to other place
rm $PHOTO_NAME
(( MESSAGES_COUNT+=1 ))
fi
done
popd
rm -rf "$dir"
答案 0 :(得分:2)
从根本上说,你正在为一些竞争条件做好准备(如果文件夹已经存在,& c)。更好的方法是在运行此脚本之前创建一个新文件夹,然后在其中运行它。所以:
dir="$(mktemp aws-sync-XXXXX)"
pushd "$dir"
# do stuff
popd
rm -rf "$dir"
这将确保您删除临时命令创建的所有内容,仅此而已。