Linux:文件解压、复制和移动的若干坑( 二 )


 
会生成对应的归档文件:

Linux:文件解压、复制和移动的若干坑

文章插图
 
再解压会得到同样的文件夹(会自动帮我们重命名),不会帮我们生成多余的目录:
Linux:文件解压、复制和移动的若干坑

文章插图
 
然而,如果我们尝试用Mac自带的压缩工具压缩多个文件:
Linux:文件解压、复制和移动的若干坑

文章插图
 
它会自动帮我们生成一个名为归档.zip的文件:
Linux:文件解压、复制和移动的若干坑

文章插图
 
然后,如果此时我们尝试对归档.zip文件进行解压,会发现系统会自动帮我们生成一个名为归档 的文件夹:
Linux:文件解压、复制和移动的若干坑

文章插图
 
这个文件夹内部才是我们需要的文件:
Linux:文件解压、复制和移动的若干坑

文章插图
 
这在对大量文件操作时需要额外注意,否则会白白开销你一次拷贝文件的时间!
文件拷贝我们紧接上面的情景 。假设我们当前的目录为项目目录,而我们手滑使用了系统自带的可视化解压工具生成了一个多余的目录 。我们接下来要把系统生成的多余的归档文件夹里的文件拷贝到当前目录,那么我们可以使用带r参数的cp命令:
orion-orion@MacBook-Pro Learn-Linux % cp -r 归档/ . orion-orion@MacBook-Pro Learn-Linux % lstest.txttest2.txt归档这里-r参数表示递归复制命令,用于目录的递归复制 。注意命令中的归档/表示归档目录下的所有文件,意思和归档/*相同:
orion-orion@MacBook-Pro Learn-Linux % cp -r 归档/* . orion-orion@MacBook-Pro Learn-Linux % lstest.txttest2.txt归档选项参数-r写成-R是等效的:
orion-orion@MacBook-Pro Learn-Linux % cp -R 归档/* . orion-orion@MacBook-Pro Learn-Linux % lstest.txttest2.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.txttest2.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-orionstaff04 20 22:01 data可以看出,第一个字母是-,也就意味着data是普通文件,不是目录(是目录的话第一个字母是d) 。
因此,使用mv语句时要格外小心,因为它既有移动到目录的作用,也有重命名的作用,一不注意就可能出错!

【Linux:文件解压、复制和移动的若干坑】


推荐阅读