linux下的cp命令详解,linux中的cp命令

  linux下的cp命令详解,linux中的cp命令

  芦苇

  Linux上可以用鼠标点击的图形界面是一个很棒的东西.但是,如果你最喜欢的开发交互环境和编译器是终端窗口、Bash、Vim,你经常和我这样的终端打交道。

  即使不经常使用终端的人也能从对终端环境的深入了解中受益。3354cp命令就是一个例子。根据维基百科,cp (copy)命令是第一个Unix系统版本的一部分。和其他命令ls、mv、cd、pwd、mkdir、vi、sh、sed、awk一起提到的Cp是我在1984年接触System V Unix系统时学到的命令之一。cp命令最常见的用途是创建文件的副本。是这样的:

  CP源文件destfile

  当这个命令在终端上运行时,上面的命令会将名为sourcefile的文件复制到名为destfile的文件中。如果在执行命令之前destfile文件不存在,将创建它,如果它已经存在,将被覆盖。

  我不知道我使用这个命令多少次了(我也不想知道),但是当我在写测试代码的时候,我知道我经常使用它。键入以下命令以保持当前的正常版本并继续修改:

  cp test1.py test1.bak

  在过去的30年里,我多次使用这个命令。另外,当我决定编写第二个测试程序版本时,请输入以下命令:

  cp test1.py test2.py

  至此,修改程序的第一步已经完成。

  通常情况下,你很少会看到cp命令的参考文档,但是在备份镜像文件夹时(在GUI环境下使用“文件”APP),cp命令可能包含只支持复制新文件或更改文件的参数。果然有!

  高效1:更新文件夹

  例如,我的电脑有存放各种文件的文件夹。此外,有时会在那里添加新文件。然后,时不时修改下载到我手机里的照片、音乐等文件。

  假设我收集的这些文件对我来说是有价值的,我有时会想制作副本,像“快照”一样保存在其他介质上。当然,很多程序都支持备份,但是我们想更准确地将目录结构复制到可移动设备上。这对于频繁使用这些离线设备和连接其他计算机非常有用。

  cp命令提供了一种简单的方法。例子如下。

  在我的图片文件夹下,有一个文件夹名为Misc为了方便解释,把文件复制到USB存储设备上。我们走吧!

  me @ desktop:~/pictures $ CP-r misc/media/clh/4388-d5fe

  me@desktop:~~/pictures$

  上面的命令完全是从终端窗口复制过来的。对于一些人来说,他们不习惯这样的环境。在我们输入或执行命令之前,前缀me@mydesktop:~/Pictures,前缀me是当前用户,mydesktop是计算机的名称,~/Pictures

  我输入并执行这个命令cp -r Misc /media/clh/4388-D5FE,然后我会把Misc目录下的所有文件(this -r参数,全称“recursive”,递归处理,这里

  当运行命令并返回到上一个提示符时,大多数命令都继承了Unix的特征。运行命令后,如果没有任何异常,则不会显示任何内容,在任务结束前会显示类似“执行成功”的提示。如果您想要更多的反馈,请使用-v参数来更详细地了解运行结果。

  下图是刚刚复制到我的USB设备上的文件夹Misc。里面有9张图片。

  imageofthenewcopyofmiscontheusbdrive

  假设您在原始复制路径~/Pictures/Misc下添加了一个新文件,如下所示:

  new filesaddedtothemasterdirectory

  使用cp的“更新”和“高级”选项,因为您只想将新文件复制到存储设备。

  me @ desktop://pictures $ CP-r-u-v misc/media/clh/4388-d5fe

   misc/asunder . png -/media/clh/4388-d5fe/misc/asunder . png

   misc/editingtagsguayadeque . png -/media/clh/4388-d5fe/misc/editingtagsguayadeque . png

  misc/misc USB . png -/media/clh/4388-d5fe/misc/misc ONU

   sb.png

  我@桌面:~/图片$

  上面的第一行是cp命令和特定的参数(-r是“递归”,-u是“更新”,-v是“详细”)。接下来的三行显示复制文件的信息,最后一行显示命令行提示符。

  一般来说,参数-r还可以用在更详细的样式中——递归。但简而言之,也可以这么用——ruv。

  高效使用2:版本备份

  回到最初的例子,我在开发期间定期备份我的代码版本。然后我找到了另一个更好的cp参数。

  假设我正在编写一个非常有用的Python程序。作为一个喜欢不断修改代码的开发人员,我会在最开始写一个简单版本的程序,然后不断给它添加各种功能,直到运行成功。比如我的第一个版本是用Python程序打印出“hello world”。只有一行代码的程序如下所示:

  打印“hello world”

  然后我将这段代码保存为一个名为test1.py的文件,我可以像这样运行它:

  me @ desktop:~/Test $ python test1 . py

  你好世界

  me@desktop:~/Test$

  现在程序可以运行了,我想在添加新内容之前做个备份。我决定使用编号备份选项,如下所示:

  clh @ Vancouver:~/Test $ CP-force-backup=编号test1.py test1.py

  clh@vancouver:~/Test$ ls

  test1.py test1.py.~1~

  clh@vancouver:~/Test$

  那么,上面的做法是什么意思呢?

  第一,这个- backup=numbered参数的意思是“我要做一个备份,而且是带数字的串行备份”。所以一个备份是1号,第二个是2号,以此类推。

  第二,如果源文件和目标文件同名。通常,我们使用cp命令来复制我们自己,并且我们得到这个错误消息:

  CP:“test1.py”和“test1 . py”是同一个文件

  在特殊情况下,如果我们要备份的源文件和目标文件同名,我们使用- force参数。

  第三,我使用ls(意思是“列表”)命令显示当前目录中的文件。名称test1.py是原始文件,名称test1.py.~1~是备份文件。

  现在,如果我想添加第二个函数,并在程序中添加另一行代码,我可以打印“Kilroy在这里。”。现在程序文件test1.py的内容如下:

  打印“hello world”

  打印“基尔罗伊在这里”

  看到Python编程有多简单了吧?无论如何,如果我再次执行备份步骤,结果如下:

  clh @ Vancouver:~/Test $ CP-force-backup=编号test1.py test1.py

  clh@vancouver:~/Test$ ls

  test1 . py test1 . py . ~ 1 ~ test1 . py . ~ 2 ~

  clh@vancouver:~/Test$

  现在我有两个备份文件:test1.py.~1~一个一行代码的程序,test1.py.~2~一个两行代码的程序。

  这是一个易于使用的功能。我在考虑做一个shell函数让它更简单。

  最终总结

  首先,在大多数桌面和服务器发行版中默认安装的Linux手册页提供了更详细的使用方法和示例。对于cp命令,在终端中输入以下命令:

  man cp

  对于那些想学习如何使用这些命令,但不知道如何使用它们的用户,他们应该先看看这些说明,然后我建议创建一个测试目录和文件来尝试使用这些命令和选项。

  第二,兴趣是最好的老师。在自己喜欢的搜索引擎中搜索“linux shell教程”,会得到很多有趣有用的资源。

  第三,你是否在想,“为什么我要用这么麻烦的方法?图形界面中也有相同的功能。只要点几下不是更简单吗?”关于这个问题,我有两个理由。首先,当我们需要中断其他工作流,大量使用点击动作时,点击动作并不简单。其次,如果要完成流水线之类的重复性工作,利用shell脚本和shell函数、shell重命名等功能就可以轻松实现。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: