2015-09-25 109 views
0

我有一个shell脚本在本地拷贝一个S3 bucket(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" 

回答

2

根本的是,你在和自己的一些比赛条件(如有什么文件夹已经存在,& c)。更好的方法是在之前创建一个新文件夹,然后在其中运行该脚本。所以:

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

# do stuff 

popd 
rm -rf "$dir" 

这将确保您删除的临时命令创建的一切,仅此而已。

+0

'do stuff'意思是我的线?你是对的:如果该文件夹已经存在,该怎么办?我想它不会再创建它,只需将图像保存在里面...但是您的方法很有趣 – sop

+0

没问题,但是如果我不想同步s3,该怎么办?我只是想复制一些文件 – sop

+0

你的意思是“不同步到S3而只是复制一些文件”?我提议的不是特定于S3:它适用于在当前目录中创建垃圾的任何命令。你通过在新目录中运行它,完成你的工作,然后删除整个目录来清理它。 – hraban