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 根据文件类型选择文件提取方法-tar.bz2、tar.gz、tar.xz_Linux_Bash_Shell_Centos - Fatal编程技术网

Linux 根据文件类型选择文件提取方法-tar.bz2、tar.gz、tar.xz

Linux 根据文件类型选择文件提取方法-tar.bz2、tar.gz、tar.xz,linux,bash,shell,centos,Linux,Bash,Shell,Centos,我有一个小的bash one liner,它从各种来源下载了一个归档文件列表。以下是包含列表的文件示例: http://this-is-url1/url1.tar.gz http://www.this-is-url2/url2.tar.bz2 http://this-is-url3/url3.tar.bz2 http://this-is-url4/url4.tar.gz http://this-is-the-last-url/url.tar.xz 我使用以下方法下载文件: for i in `

我有一个小的bash one liner,它从各种来源下载了一个归档文件列表。以下是包含列表的文件示例:

http://this-is-url1/url1.tar.gz
http://www.this-is-url2/url2.tar.bz2
http://this-is-url3/url3.tar.bz2
http://this-is-url4/url4.tar.gz
http://this-is-the-last-url/url.tar.xz
我使用以下方法下载文件:

for i in `cat d_list.txt`; do wget $i; done
其中d_list是上面文本文件的名称。现在,我想使用相同的文件来提取文件。为了提取文件名,我使用了bash和参数扩展,如下所示:

for i in `cat d_list.txt`; do echo "${i##*/}" ; done
但是正如您所看到的,文件压缩类型是不同的。我已经安装了bzip2、xz工具等,所以我的问题是如何为每个文件选择正确的提取方法


注意:我猜,一种方法是提取最后一个字符串,即xz或bz2或gz,然后使用if条件进行比较,然后选择字符串匹配的最佳提取方法。这是正确的还是有更简单的方法来实现这一点?

您可以使用以下脚本:

while read -r f; do
    wget "$f" -O "${f##*/}"
done < d_list.txt

尝试查看您的tar版本是否具有-a,-自动压缩选项:使用存档后缀确定压缩程序。它将自动处理bz/gz/…而且,正如我在另一篇文章中指出的,您可以使用wget-idu list.txt下载列表中的所有归档文件。