Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在shell中删除文件及其文件夹(如果有)?_Shell_Amazon Web Services_Amazon S3 - Fatal编程技术网

如何在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

我有一个shell脚本,它在本地为S3 bucket(aws)复制一些文件,然后将其复制到另一个地方(由于某种授权,它无法直接执行),但其想法是图像可能位于某个文件夹中,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"

从根本上说,您正在为自己设置一些竞争条件(如果该文件夹已经存在,&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了,拿个大锤就行了。