Linux 上无痛文件提取
从 Linux 系统的存档中提取文件没有拔牙那么痛苦,但有时看起来更复杂。在这篇文章中,我们将看看如何轻松地从 Linux 系统中可能遇到的几乎所有类型的存档中提取文件。
它们有很多格式,从 .gz 到 .tbz2,这些文件的命名方式都各有一些不同。当然,你可以记住所有从存档中提取文件的各种命令以及它们的选项,但是你也可以将所有经验保存到脚本中,而不再担心细节。
在本文中,我们将一系列提取命令组合成一个脚本,它会调用适当的命令根据文档名提取文件的内容。该脚本首先以一些命令来验证是否已经提供了一个文件名作为参数,或要求运行脚本的人提供文件名。
#!/bin/bash if [ $# -eq 0 ]; then echo -n "filename " read filename filename=$1 if [ ! -f "$filename" ]; then echo "No such file: $filename" exit $?
了解了么?如果未提供任何参数,脚本将提示输入文件名,如果存在则使用它。然后,它验证文件是否实际存在。如果不是,那么脚本退出。
下一步是使用 bash 的 case 语句根据存档文件的名称调用适当的提取命令。对于其中某些文件类型(例如 .bz2),也可以使用除 tar 之外的其它命令,但是对于每种文件命名约定,我们仅包含一个提取命令。因此,这是带有各种存档文件名的 case 语句:
case $filename in *.tar) tar xf $filename;; *.tar.bz2) tar xjf $filename;; *.tbz) tar xjf $filename;; *.tbz2) tar xjf $filename;; *.tgz) tar xzf $filename;; *.tar.gz) tar xzf $filename;; *.gz) gunzip $filename;; *.bz2) bunzip2 $filename;; *.zip) unzip $filename;; *.Z) uncompress $filename;; *) echo "No extract option for $filename"
如果提供给脚本的文件扩展名与脚本已知的扩展名都不匹配,那么会发出 No extract option for $filename 的消息。如果缺少你使用的任何存档类型,只需将它们与所需的提取命令一起添加即可。
将 bash 头添加到脚本顶部,使其可执行,然后就可以开始了。
#!/bin/bash if [ $# -eq 0 ]; then echo -n "filename " read filename filename=$1 if [ ! -f "$filename" ]; then echo "No such file: $filename" exit $? case $filename in *.tar) tar xf $filename;; *.tar.bz2) tar xjf $filename;; *.tbz) tar xjf $filename;; *.tbz2) tar xjf $filename;; *.tgz) tar xzf $filename;; *.tar.gz) tar xzf $filename;; *.gz) gunzip $filename;; *.bz2) bunzip2 $filename;; *.zip) unzip $filename;; *.Z) uncompress $filename;; *.rar) rar x $filename ;;
如果你希望脚本在提取文件时显示内容,请将详细选项(-v)添加到每个命令参数字符串中:
#!/bin/bash if [ $# -eq 0 ]; then echo -n "filename " read filename filename=$1 if [ ! -f "$filename" ]; then echo "No such file: $filename" exit $? case $filename in *.tar) tar xvf $filename;; *.tar.bz2) tar xvjf $filename;; *.tbz) tar xvjf $filename;; *.tbz2) tar xvjf $filename;; *.tgz) tar xvzf $filename;; *.tar.gz) tar xvzf $filename;; *.gz) gunzip -v $filename;; *.bz2) bunzip2 -v $filename;; *.zip) unzip -v $filename;; *.Z) uncompress -v $filename;; *) echo "No extract option for $filename"
虽然可以为每个可能用到的提取命令创建别名,但是让脚本为遇到的每种文件类型提供命令要比自己停下来编写每个命令和选项容易。
via: https://www.networkworld.com/article/3564265/painless-file-extraction-on-linux.html
作者:Sandra Henry-Stocker 选题:lujun9972 译者:geekpi 校对:wxy
本文由 LCTT 原创编译,Linux中国 荣誉推出
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/49470.html
linux相关文章
- 锁定文件:Linux 的安全防护(linux锁文件)
- Linux下如何优雅地删除文件(linux中删除文件)
- 器上文件Linux 检查 FTP 服务器文件的方法(linux查看ftp服务)
- 名Linux获取文件名:一步一步搞定(linux获取所有文件)
- 文件如何运行Linux下的.sh文件(linux如何运行.sh)
- Linux安装指南:选择最适合您的版本(linux安装哪个版本)
- Linux 环境下轻松转换文件格式(linux文件转码)
- Linux文件权限限制的深入分析(linux文件限制)
- Linux之分支:探索开源世界(linux的分支)
- Linux操作系统的发展分支(linux的分支)
- 深入Linux系统,查找隐藏文件(linux查找隐藏文件)
- Linux下查找文件中字符串的方法(linux文件查找字符串)
- Linux运维管理:每日实践任务(linux运维日常工作)
- Linux文件添加内容的7种方式(linux文件添加内容)
- 探讨Linux的多元分支发展(linux的分支)
- 轻松掌握Linux下SVN版本控制工具的使用(linux下svn的使用)
- Linux文件隐藏:简单方法(linux如何隐藏文件)
- 轻松搞定!Linux多个文件一次性复制教程(linux多个文件复制)
- 简单易学:Linux文件拷贝操作教程(linux如何拷贝文件)
- 实现 Linux 上的动态路由配置(linux动态路由配置)
- 函数Linux下实现Oracle函数调用(linux调用oracle)
- 阿里云Linux之上传文件篇(阿里云linux上传文件)
- Linux读取文件一行一行的方法(linux按行读文件)
- Linux文件读写属性探索(linux读写属性)
- Linux命令打开文件,解决迷惑问题(linux用命令打开文件)
- Linux关机命令汇总,让您轻松关机!(linux中的关机命令)
- Linux协会:加入开源力量,开启编程之门(linux协会)
- Linux终端:聪明人的必备设置技巧(linux终端设置)
- Linux命令:掌握这些小技能大有裨益(linux命令1)
- 夹Linux下快速新建文件夹的简易方法(linux 下新建文件)