希望从 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
$
答案2
basename
正是您需要的工作。
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