Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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
Linux 如何从AWS s3中删除除最新5个最近更新/新文件以外的所有文件?_Linux_Shell_Amazon Web Services_Amazon S3_Aws Cli - Fatal编程技术网

Linux 如何从AWS s3中删除除最新5个最近更新/新文件以外的所有文件?

Linux 如何从AWS s3中删除除最新5个最近更新/新文件以外的所有文件?,linux,shell,amazon-web-services,amazon-s3,aws-cli,Linux,Shell,Amazon Web Services,Amazon S3,Aws Cli,我可以使用下面的命令从AWS S3获取最后五个更新的文件 aws s3 ls s3://somebucket/ --recursive | sort | tail -n 5 | awk '{print $4}' 现在我需要删除AWS S3中的所有文件,除了从AWS中的上述命令中获取的最后5个文件 假设该命令获取1.txt、2.txt、3.txt、4.txt、5.txt。我需要从AWS S3中删除除1.txt、2.txt、3.txt、4.txt和5.txt之外的所有文件。使用带有多个排除选项的命

我可以使用下面的命令从AWS S3获取最后五个更新的文件

aws s3 ls s3://somebucket/ --recursive | sort | tail -n 5 | awk '{print $4}'
现在我需要删除AWS S3中的所有文件,除了从AWS中的上述命令中获取的最后5个文件

假设该命令获取1.txt、2.txt、3.txt、4.txt、5.txt。我需要从AWS S3中删除除1.txt、2.txt、3.txt、4.txt和5.txt之外的所有文件。

使用带有多个排除选项的命令,我假设最后5个文件不属于某个模式

aws s3 rm s3://somebucket/ --recursive --exclude "somebucket/1.txt" --exclude "somebucket/2.txt" --exclude "somebucket/3.txt" --exclude "somebucket/4.txt" --exclude "somebucket/5.txt"
警告:请确保使用-dryrun选项进行尝试,在实际删除文件之前,验证要删除的文件不包括这5个文件。

使用带有多个-exclude选项的命令。我假设最后5个文件不属于某个模式

aws s3 rm s3://somebucket/ --recursive --exclude "somebucket/1.txt" --exclude "somebucket/2.txt" --exclude "somebucket/3.txt" --exclude "somebucket/4.txt" --exclude "somebucket/5.txt"

警告:请确保使用-dryrun选项进行尝试,在实际删除文件之前,验证要删除的文件不包括5个文件。

使用带head的负数来获取除最后n行以外的所有行:


使用带有head的负数获取除最后n行以外的所有行:


我结合了许多解决方案,想出了这个方法来删除除最后30个文件以外的所有文件。请注意,按日期和时间排序需要两种排序。这也会处理带有空格的文件

aws s3 ls s3://your-bucket/ --recursive | sort -k1 | sort -k2 | head -n -30 | awk '{$1=$2=$3=""; print $0}' | sed 's/^[ \t]*//' | while read -r line ; do
    echo "Removing \"${line}\"";
    aws s3 rm "s3://your-bucket/${line}";
done

我结合了许多解决方案,想出了这个方法来删除除最后30个文件以外的所有文件。请注意,按日期和时间排序需要两种排序。这也会处理带有空格的文件

aws s3 ls s3://your-bucket/ --recursive | sort -k1 | sort -k2 | head -n -30 | awk '{$1=$2=$3=""; print $0}' | sed 's/^[ \t]*//' | while read -r line ; do
    echo "Removing \"${line}\"";
    aws s3 rm "s3://your-bucket/${line}";
done

Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的提问的地方。另请参见Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的提问的地方。也看到