范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

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

  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.zip Archive:  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 test a 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.txt a test2.txt
  然后将其解压到当前目录: orion-orion@MacBook-Pro Learn-Linux % tar -xv -f test3.zip -C . x test.txt x test2.txt
  由上面所说, zip  /unzip  和tar  都是压缩什么解压出来就是什么,原来是目录就是目录,原来没目录不会帮你自动生成一个目录,但Linux或Mac系统的可视化压缩工具就不一样了(在Mac中被称为「归档实用工具」)。Mac中对目录压缩时压缩命令和tar  命令是等效的,比如我们想用Mac自带的压缩工具压缩test  文件夹:
  会生成对应的归档文件:
  再解压会得到同样的文件夹(会自动帮我们重命名),不会帮我们生成多余的目录:
  这个文件夹内部才是我们需要的文件:
  它会自动帮我们生成一个名为 归档.zip  的文件:
  这个文件夹内部才是我们需要的文件:
  这个文件夹内部才是我们需要的文件:
  这在对大量文件操作时需要额外注意,否则会白白开销你一次拷贝文件的时间! 文件拷贝
  我们紧接着上面的情景。假设我们当前的目录为项目目录,而我们手滑使用了系统自带的可视化解压工具生成了一个多余的目录。我们接下来要把系统生成的多余的 归档  文件夹里的文件拷贝到当前目录,那么我们可以使用带r  参数的cp  命令:orion-orion@MacBook-Pro Learn-Linux % cp -r 归档/ .  orion-orion@MacBook-Pro Learn-Linux % ls test.txt        test2.txt       归档
  这里 -r  参数表示递归复制命令,用于目录的递归复制。注意命令中的归档/  表示归档  目录下的所有文件,意思和归档/*  相同:orion-orion@MacBook-Pro Learn-Linux % cp -r 归档/* .  orion-orion@MacBook-Pro Learn-Linux % ls test.txt        test2.txt       归档
  选项参数 -r  写成-R  是等效的:orion-orion@MacBook-Pro Learn-Linux % cp -R 归档/* .  orion-orion@MacBook-Pro Learn-Linux % ls test.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 data orion-orion@MacBook-Pro Learn-Linux % ls data test.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 data test.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  语句时要格外小心,因为它既有移动到目录的作用,也有重命名的作用,一不注意就可能出错!
  有移动到目录的作用,也有重命名的作用,一不注意就可能出错!
  就可能出错!

RED发布VRaptorST旗舰电影机起售价24500美元RED今日推出了最新款旗舰电影机,它就是售价2。45万美元且规格更加耀眼的VRaptorST。作为该公司DSMC3世代相机的首个成员,VRaptorST采用了3540万像素的8KV中兴6000mAh新机强势上线,骁龙895芯片144Hz高刷新率,实力猛增中兴可以说是国产手机中的老品牌,但中兴与后来兴起的小米华为OV相比,中兴在智能手机行业的影响力微乎其微。其中兴在智能手机才兴起时还是比较吃香的,当时还是掀起了一番波浪。中兴对手机研iPhone1364G起步,拉低起售价花式割韭菜?网友库克套路深不得不说,库克确实是一位精明的商人,乔布斯把苹果交到他手上确实是明智之举。目前基本已经确定,苹果今年的秋季发布会将于9月14日举行,届时我们将见到iPhone13系列。在发布时间曝iPhone13正式定档!网友但说到小屏旗舰,还得看我魅族18相信屏幕前有关注手机圈的朋友应该都知道,9月10月一直都是全球手机市场非常敏感的一个时间,原因无它,只是因为每当一到这个时候,iPhone新机就离发布不远了。并且笔者我相信,屏幕前5g冲浪少女!杨超越在线调侃孟子义最近姐姐过得可好?近日,孟子义在综艺节目里的言论,再度引发情商低争议。事后,孟子义发博回应,晒出与经纪人聊天截图,透露已经被经纪人骂了。孟子义被批情商低后,引来杨超越的围观调侃,在孟子义短视频平台最六一再升级!微信青少年模式加大保护文羊城晚报全媒体记者王丹阳6月1日,微信青少年模式保护能力再升级。设置该模式后,青少年将只能在微信视频号观看平台精选的适合青少年内容,无法使用微信豆功能或在视频号直播间进行打赏。据深度了解国产手机系统的前世今生随着华为鸿蒙OS正式发布时间越来越接近,网络上对国产操作系统的区于两极化的讨论也是屡见不至。希望大家都理性对待,理性爱国。今天随着小编的文章带大家回顾下国产手机操作系统的前世今生。特斯拉核心技术探索,拆开电池组后,竟惊现七千多节5号电池虽然汽车的便利极大地提升了人们的生活质量,但同时也带来了很大的环境问题,其中主要原因是汽车所使用燃油。而燃油是汽车的主要动力来源,在提供动能的同时也造成了严重的环境问题。我国其实早医生不戴听诊器医疗技术水平会怎样呢?作为一名内科医生,我不知道别人是什么样,但是我听诊器从不离身。大笑大笑正常情况下就搭在肩膀上,有的时候也放在左侧的大衣口袋里。身上不带着听诊器,总觉得没抓没落,感觉就像一个上了战场做一个包含30个摄像头的视频监控系统,需要保存90天,需要多少硬盘?造价多少?30个镜头,我目前按照最出的H。264编码来给你计算,一个镜头一天24小时的录像占用硬盘的容量约为21GB,你这30个镜头一天24小时的占用空间大约就在630GB左右一张硬盘的可使手机是5g的,套餐是5g的,信号为啥一直是4g的?我想这是很多人一直纠结和疑惑的点!我手机是5G的,套餐也是5G的,但为何信号一直是4G?我花了这么多钱,这体验完全没跟上呀!检查是否关闭5G?虽说现在5G手机很多,但很多手机并不是
梦龙风波双标背后,根源何在?梦龙风波华说盛夏时节,正是一年之中冷饮销售的尖峰时刻。冷饮厂商的好日子也。不过,知名冷饮厂商和路雪这些天很是闹心,因为其旗下的畅销产品梦龙卷入了一场突如其来的舆论漩涡,网络上唾沫与日本房东为什么不愿意将房子租给外国人?日本的租房歧视华说昨天在网上看到一则报道,是从日本时报翻过来的。报道说,日本房东变得越来越挑剔,拒绝大量非日本籍租户。日本政府的一项调查显示,大约有40的受访者曾遭到房东拒绝,原因意图垄断还是应对竞争?简评虎牙斗鱼合并案虎牙斗鱼合并案刍议华说虎牙公司与斗鱼国际控股有限公司合并一案,被市场监管总局出手制止了。这是在意料之中的。在刻下,反垄断已成一种政治正确,时代潮流所向。中国如是,国外亦如是,环球同直逼北大清华,师范大学今年为什么大热?火热的师范大学华说2021年的高考招录工作收官了。对参与高考的学生及其家庭而言,有人欢喜有人忧,几家欢乐几家愁。年年如此,历来如此。其实不唯学生及其家庭,高校亦是如此,有失意者,亦买不到圣诞礼物了?BBC多虑了义乌的圣诞物品华说宁波舟山港一位码头工人在例行的新冠病毒检测中呈现阳性,令包括BBC在内的一众西方媒体为之忧心忡忡。当然,他们担心的,不是这位工人的身体状况,也不是中国出现了新的疫个人自主挂牌房源上线,中介末日来临?你想多了房东直销房源中介末日及其他华说前些天,官方的杭州市二手房交易监管服务平台上线了个人自主挂牌房源功能。所谓个人自主挂牌房源,是个人在该平台实名注册,在线填写房屋客体信息房屋权属状况及品牌的迷思60后70后崇洋媚外,90后00后爱国自信?品牌选择的变迁华说正处于进行时的亚布力中国企业家论坛上,知名民企新希望集团的主事者刘永好提到了一件有趣的事情我所知道的一个消费品品牌,过去五年花了大价钱去做品牌营销和包装,让自己看共同富裕与第三次分配究竟是啥意思?共同富裕与第三次分配华说近日召开的中央财经委员会第十次会议提出了在高质量发展中促进共同富裕的目标,同时给出了实现上述目的路径正确处理效率和公平的关系,构建初次分配再分配三次分配协调对华关税,美国企业承担90以上,为啥搬起石头砸自己的脚?中美关税的负担者华说做生意的人很喜欢算账,因为算了账,才会知道是亏了还是赚了。美国穆迪投资者服务公司近来算了一笔账。美国消费者新闻与商业频道(CNBC)报道说,该公司在其5月17日拜登政府会撤销对华加征的关税么?拜登政府会撤销对华加征关税么?华说我个人的观点是,对中国征收关税的方式没有经过深思熟虑。关税就是对消费者征税,在我看来,某些情况下,我们的所作所为伤害了美国消费者。而上届政府谈判达二手房指导价长春新政与楼市调控二手房指导价长春新政与楼市调控华说引入二手房指导价的城市,日见其多了。最新的一例,是广州。广州市住房和城乡建设局昨天对外发布了关于建立二手住房交易参考价格发布机制的通知。通知说,出