从 URL 和文件名经常变化的 URL 中提取以 tar.gz 结尾的文件名

从 URL 和文件名经常变化的 URL 中提取以 tar.gz 结尾的文件名

希望从 URL 中提取以 tar.gz 结尾的文件名,其中 URL、位置和文件名可能会经常更改。

https://s3.eu-central-1.wasabisys.com/testing/snapshot-latest.tar.gz 
https://s3.eu-central-2.wasabisys.com/testing/support/testing.tar.gz

我想到使用 cut 和 grep,但是由于“/”的数量改变,这并不实际。

答案1

如何从 URL 中提取以 tar.gz 结尾的文件名?

选项1:

您可以使用${url##*/}

$ url="https://s3.eu-central-1.wasabisys.com/testing/snapshot-latest.tar.gz "; echo "${url##*/}"
snapshot-latest.tar.gz
$ url="https://s3.eu-central-2.wasabisys.com/testing/support/testing.tar.gz"; echo "${url##*/}"
testing.tar.gz
$

来源:使用 bash 从 URL 中提取基本文件名,回答者曼努埃尔·施奈德3r

选项 2:

basename也适用于 URL:

$ url="https://s3.eu-central-1.wasabisys.com/testing/snapshot-latest.tar.gz "; basename $url
snapshot-latest.tar.gz
$ url="https://s3.eu-central-2.wasabisys.com/testing/support/testing.tar.gz"; basename $url
testing.tar.gz
$

来源:使用 bash 从 URL 中提取基本文件名回答弗兰克·兹达斯基

答案2

basename正是您需要的工作。

man 1 基本名称

NAME
       basename - strip directory and suffix from filenames

在您的示例中:

$ basename https://s3.eu-central-1.wasabisys.com/testing/snapshot-latest.tar.gz

snapshot-latest.tar.gz输出。

如果您需要从文件列表(例如使用 ls 获取的文件列表)中提取基本名称,则可以通过xargs以下命令将列表传输到:

ls somedir/*.tar.gz |xargs -I {} basename {}

答案3

首先:在处分隔字符串/并打印最后一列awk

$echo "https://link/snapshot-latest.tar.gz" | awk -F"/" '{print $NF}'
snapshot-latest.tar.gz

第二步:如果要剪切“tar.gz”,请删除最后 7 个字符:

$echo "https://link/snapshot-latest.tar.gz" | awk -F"/" '{print $NF}' | sed 's/.\{7\}$//'
snapshot-latest

相关内容