千家信息网

Linux shell怎么进行文件解压,复制和移动

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容介绍了"Linux shell怎么进行文件解压,复制和移动"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能
千家信息网最后更新 2026年10月31日Linux shell怎么进行文件解压,复制和移动

本篇内容介绍了"Linux shell怎么进行文件解压,复制和移动"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

将文件单个地进行压缩与解压

Linux下压缩文件的常见扩展名包括.gz,.tar,.tar.gz, .zip等。这些压缩格式都能够跨平台(Windows/Mac/Linux)使用。下面我们以.zip文件为例子来讲解。我们已知一个文本文件压缩包test.zip,想把它解压,很简单,运行unzip命令即可:

orion-orion@MacBook-Pro Learn-Linux % unzip test.zip Archive:  test.zip  inflating: test.txt

如果我们想要将test.txt重新压缩呢?你可能情不自禁会执行zip test.txt,然后我们发现提示:

orion-orion@MacBook-Pro Learn-Linux % zip test.txt           zip warning: missing end signature--probably not a zip file (did you        zip warning: remember to use binary mode when you transferred it?)        zip warning: (if you are trying to read a damaged archive try -F)zip error: Zip file structure invalid (test.txt)

其实是传参数传错了,导致zip误把test.txt当成压缩后的文件名了,这当然不是合法的。我们看zip的参数构成:

zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]

[-b path]是压缩后的.zip文件的路径,zipfile list是待压缩的文件列表。于是,我们这样写即可成功压缩:

orion-orion@MacBook-Pro Learn-Linux % zip test2.zip test.txt  adding: test.txt (stored 0%)

当然,zip也支持将多个文件压缩:

orion-orion@MacBook-Pro Learn-Linux % zip test3.zip test.txt test2.txt   adding: test.txt (stored 0%)  adding: test2.txt (stored 0%)

此时我们发现再解压test3.zip会发现重新得到了两个原始文件:

orion-orion@MacBook-Pro Learn-Linux % unzip test3.zipArchive:  test3.zip extracting: test.txt                 extracting: test2.txt

zip也支持对目录压缩,如我们尝试压缩test目录:

orion-orion@MacBook-Pro Learn-Linux % zip test4.zip test  adding: test/ (stored 0%)

此时再解压test4.zip则会重新生成test目录:

orion-orion@MacBook-Pro Learn-Linux % unzip test4.zip Archive:  test4.zip   creating: test/

不过,zip是将输入的文件列表分别进行压缩的操作,即是对目录来进行压缩也是对目录内的所有文件one-by-one的操作。那我们需要将很多文件先打包成一个文件,然后再压缩呢?此时就要用到tar了。

tar:打包命令

很多人误解tar是个压缩命令,其实压缩命令是gzip、xz以及我们上文提到的zip这些。tar是个打包命令,只不过附带压缩与解压的功能。tar的选项多如牛毛,为了减轻大家的记忆负担,我们只介绍下面两个选项:

-c: 建立打包文件(可搭配-v将过程中打包的文件可视化);

-x:解包或解压缩的功能(可搭配-C在特定目录解压);

(其实还有表示通过gzip进行压缩/解压缩的-z,通过bzip2的支持进行压缩/解压缩的-j,通过xz的支持进行压缩解压缩的-J等,但我们这里统一用.zip示范,就省去这些参数了)

那么,我们只需要记住下面的命令即可:

压缩: tar -cv -f filename.zip 要被压缩的文件或目录名称

解压缩:tar -xv -f filename.zip -C 欲解压的目录(这个目录必须已经存在)

注意,压缩传参顺序是压缩后的.zip文件在前,压缩前的文件在后,别搞错了。(让人联想到gcc编译器,不过gcc传参时规定是-o output_file.out的形式来指定输出的可执行文件,就回避了这个顺序问题)

比如,我们要将test文件夹(该文件夹下有一个test.txt文件)压缩,可以运行如下命令:

orion-orion@MacBook-Pro Learn-Linux % tar -cv -f test4.zip test    a testa test/test.txt

然后将其解压到当前目录,可运行如下命令:

orion-orion@MacBook-Pro Learn-Linux % tar -xv -f test4.zip -C .    x test/x test/test.txt

对多个文件压缩:

orion-orion@MacBook-Pro Learn-Linux % tar -cv -f test3.zip test.txt test2.txt  a test.txta test2.txt

然后将其解压到当前目录:

orion-orion@MacBook-Pro Learn-Linux % tar -xv -f test3.zip -C .x test.txtx test2.txt

由上面所说,zip/unzip和tar都是压缩什么解压出来就是什么,原来是目录就是目录,原来没目录不会帮你自动生成一个目录,但Linux或Mac系统的可视化压缩工具就不一样了(在Mac中被称为「归档实用工具」)。Mac中对目录压缩时压缩命令和tar命令是等效的,比如我们想用Mac自带的压缩工具压缩test文件夹:

会生成对应的归档文件

再解压会得到同样的文件夹(会自动帮我们重命名),不会帮我们生成多余的目录

然而,如果我们尝试用Mac自带的压缩工具压缩多个文件

它会自动帮我们生成一个名为归档.zip的文件

然后,如果此时我们尝试对归档.zip文件进行解压,会发现系统会自动帮我们生成一个名为归档 的文件夹:

这个文件夹内部才是我们需要的文件

这在对大量文件操作时需要额外注意,否则会白白开销你一次拷贝文件的时间!

文件拷贝

我们紧接上面的情景。假设我们当前的目录为项目目录,而我们手滑使用了系统自带的可视化解压工具生成了一个多余的目录。我们接下来要把系统生成的多余的归档文件夹里的文件拷贝到当前目录,那么我们可以使用带r参数的cp命令:

orion-orion@MacBook-Pro Learn-Linux % cp -r 归档/ . orion-orion@MacBook-Pro Learn-Linux % lstest.txt        test2.txt       归档

这里-r参数表示递归复制命令,用于目录的递归复制。注意命令中的归档/表示归档目录下的所有文件,意思和归档/*相同:

orion-orion@MacBook-Pro Learn-Linux % cp -r 归档/* . orion-orion@MacBook-Pro Learn-Linux % lstest.txt        test2.txt       归档

选项参数-r写成-R是等效的:

orion-orion@MacBook-Pro Learn-Linux % cp -R 归档/* . orion-orion@MacBook-Pro Learn-Linux % lstest.txt        test2.txt       归档

但如果直接传入参数归档,则表示将这个目录整个地复制:

orion-orion@MacBook-Pro Learn-Linux % cp -r 归档 .   cp: ./归档 and 归档 are identical (not copied).

同一个目录下不可能有两个相同名称的子目录,这当然就会出错,当然我们可以将其复制到另外一个目录里:

orion-orion@MacBook-Pro Learn-Linux % cp -r 归档 /tmp orion-orion@MacBook-Pro Learn-Linux % ls /tmp |grep 归档归档

你可能要问,加r和不加r有啥区别?如果不加r,则默认是跳过目录的,也就是说只能copy文件:

orion-orion@MacBook-Pro Learn-Linux % cp  归档/ .  cp: 归档/ is a directory (not copied).orion-orion@MacBook-Pro Learn-Linux % cp  归档 /tmp cp: 归档 is a directory (not copied).

文件移动

我们还是紧接着上面的场景。假定我们已经将归档文件夹中的test.txt、test2.txt成功拷贝到当前项目目录了。现在我们有了个新的需求:我们在项目目录中建了一个data子目录,现在需要将项目目录中的test.txt、test2.txt移动到data子目录中。这就需要如下命令:

orion-orion@MacBook-Pro Learn-Linux % mv test2.txt test.txt dataorion-orion@MacBook-Pro Learn-Linux % ls datatest.txt        test2.txt

注意,如果有多个源文件或目录,则最后一个目标文件(也就是这里的data)一定是目录。当我们只移动一个文件时,就有潜在的二义性。这里因为data目录本身存在,我们移动test.txt到data目录还能正常执行:

orion-orion@MacBook-Pro Learn-Linux % mv test.txt data orion-orion@MacBook-Pro Learn-Linux % ls datatest.txt

但是如果data目录不存在,就会将mv解释为重命名的意思,比如如果我们将data目录删除再执行:

orion-orion@MacBook-Pro Learn-Linux % mv test.txt data

此时就等效于把test.txt更名为data文件:

orion-orion@MacBook-Pro Learn-Linux % ls -l|grep data-rw-r--r--  1 orion-orion  staff    0  4 20 22:01 data

可以看出,第一个字母是-,也就意味着data是普通文件,不是目录(是目录的话第一个字母是d)。

因此,使用mv语句时要格外小心,因为它既有移动到目录的作用,也有重命名的作用,一不注意就可能出错!

"Linux shell怎么进行文件解压,复制和移动"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

文件 目录 命令 文件夹 生成 移动 参数 工具 多个 拷贝 系统 项目 支持 两个 子目 子目录 面的 可视化 尝试 运行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州百单互联网科技有限公司 科技创新与互联网经济 中资互联网科技 腾讯科技 互联网女皇 碳银互联网科技有限公司 互联网科技美容 湖南洣水互联网科技有限公司扣款 中国科技互联网公司收入 银川新华互联网科技职业技术培训学校图片 互联网科技教育视频 昊天互联网科技有限公司 成都互联网科技公司工作好不好 电子科技大学互联网创业大赛 北京市互联网新科技 雨阳互联网卡科技有限公司 广州千川互联网科技有限公司 半导体是互联网高科技吗 2021世界互联网领先科技成果发布 互联网金融运营模式中的金融科技 杭州融税互联网科技有限公司 科技互联网公司装修 奔汉互联网科技 天下捷融互联网科技 互联网金融 科技创新 互联网系的金融科技公司 黑科技 体验场景 互联网大会 厦门江牛科技互联网 富国互联网科技002692 西安有哪些互联网高科技企业 互联网科技大佬云集
0