2015-09-25 107 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