在Linux系统上从存档中提取文件比拔牙更痛苦,但有时看起来更复杂。在本文中,我们将了解如何轻松地从您在Linux系统上可能遇到的几乎所有类型的存档中提取文件。它们有多种格式,从.gz到.tbz2,并且文件命名略有不同。当然,您可以记住所有用于从存档中提取文件的各种命令及其选项,但您也可以将所有经验保存到一个脚本中,而不必担心细节。在本文中,我们将一系列提取命令组合成一个脚本,该脚本会根据文档名称调用相应的命令来提取文件的内容。该脚本以一些命令开始,以验证是否已将文件名作为参数提供,或者要求运行该脚本的人提供文件名。#!/bin/bashif[$#-eq0];thenecho-n"filename>"readfilenameelsefilename=$1fiif[!-f"$filename"];thenecho"Nosuchfile:$filename"exit$?Fi明白了吗?如果没有提供任何参数,脚本将提示输入文件名并在存在时使用它。然后,它验证文件是否确实存在。如果不是,则脚本退出。下一步是使用bash的case语句根据存档文件的名称调用适当的提取命令。对于其中一些文件类型(例如.bz2),除tar之外的其他命令也可用,但我们只为每个文件命名约定包含一个提取命令。所以这里是带有各种存档文件名的case语句:;*.tgz)tarxzf$文件名;;*.tar.gz)tarxzf$文件名;;*.gz)gunzip$文件名;;*.bz2)bunzip2$文件名;;*.zip)unzip$文件名;;*.Z)uncompress$filename;;*)echo"Noextractoptionfor$filename"esac如果提供给脚本的文件扩展名与脚本已知的不匹配,则发出“Noextractoptionfor$filename”消息。如果您使用的任何存档类型丢失,只需将它们与所需的提取命令一起添加。在脚本顶部添加一个bash标头,使其可执行,然后就可以开始了。#!/bin/bashif[$#-eq0];thenecho-n"filename>"readfilenameelsefilename=$1fiif[!-f"$filename"];thenecho"Nosuchfile:$filename"exit$?ficase$filenamein*.tar)tarxf$文件名;;*.tar.bz2)tarxjf$文件名;;*.tbz)tarxjf$文件名;;*.tbz2)tarxjf$文件名;;*.tgz)tarxzf$文件名;;*.tar。gz)tarxzf$文件名;;*.gz)gunzip$文件名;;*.bz2)bunzip2$文件名;;*.zip)unzip$文件名;;*.Z)uncompress$文件名;;*.rar)rarx$文件名;;*)如果您希望脚本在提取文件时显示内容,请将详细选项(-v)添加到每个命令参数字符串:#!/bin/bashif[$#-eq0];thenecho-n"filename>"readfilenameelsefilename=$1fiif[!-f"$filename"];thenecho"Nosuchfile:$filename"exit$?ficase$filenamein*.tar)tarxvf$filename;;*.tar.bz2)tarxvjf$filename;;*.tbz)tarxvjf$文件名;;*.tbz2)tarxvjf$文件名;;*.tgz)tarxvzf$文件名;;*.tar.gz)tarxvzf$文件名;;*.gz)gunzip-v$文件名;;*.bz2)bunzip2-v$filename;;*.zip)unzip-v$filename;;*.Z)uncompress-v$filename;;*)echo"Noextractoptionfor$filename"esac摘要虽然可以为您可能使用的每个提取命令创建别名,但让脚本为它遇到的每个文件类型提供命令比自己停止并编写每个命令和选项更容易
