如何在shell中删除文件及其文件夹(如果有)?
我有一个shell脚本,它在本地为S3 bucket(aws)复制一些文件,然后将其复制到另一个地方(由于某种授权,它无法直接执行),但其想法是图像可能位于某个文件夹中,shell在本地创建它,但它只是删除了图像,我发现执行后我有一些空文件夹。因此,我的问题是,如果名称中存在该文件夹,如何删除该文件夹 复制和删除的我的外壳部件:如何在shell中删除文件及其文件夹(如果有)?,shell,amazon-web-services,amazon-s3,Shell,Amazon Web Services,Amazon S3,我有一个shell脚本,它在本地为S3 bucket(aws)复制一些文件,然后将其复制到另一个地方(由于某种授权,它无法直接执行),但其想法是图像可能位于某个文件夹中,shell在本地创建它,但它只是删除了图像,我发现执行后我有一些空文件夹。因此,我的问题是,如果名称中存在该文件夹,如何删除该文件夹 复制和删除的我的外壳部件: aws s3 cp s3://$SRC_BUCKET/$PHOTO_NAME $PHOTO_NAME --profile $SRC_PROFILE # copy to
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"
从根本上说,您正在为自己设置一些竞争条件(如果该文件夹已经存在,&c)。更好的方法是在运行此脚本之前创建一个新文件夹,然后在其中运行它。因此:
dir="$(mktemp aws-sync-XXXXX)"
pushd "$dir"
# do stuff
popd
rm -rf "$dir"
这将确保删除临时命令创建的所有内容,仅此而已。
do stuff
是指我的行吗?你是对的:如果文件夹已经存在怎么办?!我想它不会再创建它了,只是把图像保存在里面。。。但是你的方法很有趣好吧,但是如果我不想同步s3呢?我只想复制一些文件你说的“不同步到s3,只复制一些文件”是什么意思?我的建议并不特定于S3:它适用于在当前目录中创建垃圾的任何命令。你可以在一个新目录中运行它,完成你的工作,然后删除整个目录来清理它。你是说要更改$PHOTO\u NAME
?因为现在它正在将图像保存在/a.jpg
或/b/a.jpg
中,即使我给您添加了行。它似乎创建了临时文件夹,但没有在其中下载…不,我是说你的案例定义太不明确。我不在乎aws工具做什么,我只在乎它能创建上千个目录和文件。如果您只想清理它创建的任何混乱,而不是查找该混乱,那么只需在新(空)目录中执行所有操作,并将其删除即可。在那里,问题得以避免。别再关心aws了,拿个大锤就行了。