在shell中如何删除文件及其文件夹?

时间:2015-09-25 11:11:54

标签: shell amazon-web-services amazon-s3

我有一个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"

1 个答案:

答案 0 :(得分:2)

从根本上说,你正在为一些竞争条件做好准备(如果文件夹已经存在,& c)。更好的方法是在运行此脚本之前创建一个新文件夹,然后在其中运行它。所以:

dir="$(mktemp aws-sync-XXXXX)"
pushd "$dir"

# do stuff

popd
rm -rf "$dir"

这将确保您删除临时命令创建的所有内容,仅此而已。