如何将目录及其内容复制到新目录名称下的新位置?


52

我是Linux命令行的新手,目前正在尝试使用copy命令。

谁能告诉我是否可以将包含子目录和相关文件的目录复制到具有新名称(例如directory_backup)的新目录中?

感谢您提前提供的所有帮助

Answers:


69

您使用-r(递归复制)并指定新名称

cp -r /path/to/directory /path/to/location/new-name

替换为真实路径...例如,stuff从我的主目录复制到现有目录backup并命名新目录stuff-backup(如果此目录已存在,请注意stuff将其复制其中,而不是覆盖它)。

cp -r ~/stuff ~/backup/stuff-backup

~是您的主目录/home/$USER/home/zanna我的情况下的快捷方式。如果当前工作目录是您的主目录,则可以忽略它-您可以在提示符下看到它

zanna@monster:~$
              ^--the ~ here is where I am - home!

您可以添加-v详细标志,以使cp正在执行的每个副本都报告出来...

$ cp -vr stuff backup/stuff-backup
'stuff/thing1' -> 'backup/stuff-backup/thing1'
'stuff/thing2' -> 'backup/stuff-backup/thing2
...

抱歉Zanna。我会把您的建议付诸实践,看看我会怎样。就像冗长的标志的想法。假设在执行其他命令时,它也可以作为报告使用。
Edmuntu '16

@Edmuntu抱歉吗?是的,很多命令都带有-v--verbose标记:)
Zanna 2016年

抱歉,最初的简短提示是“谢谢”。...错误地按了返回键。
Edmuntu '16

10

您需要的命令只是cp“复制”的缩写。

例如,可以将其与以下语法之一一起使用:

cp SOURCEFILE TARGETFILE
cp SOURCEFILE TARGETDIRECTORY

第一个变量允许您为目标文件指定一个新文件名,而第二个变量则在目标目录中创建一个具有相同名称的副本。当然,您必须首先用有效路径替换大写字母中的占位符。

但是,cp默认情况下仅对文件起作用,而对目录不起作用。要使其递归复制完整目录及其所有内容,必须添加以下-r选项:

cp -r SOURCEDIRECTORY TARGETDIRECTORY

您可以cp通过man cp在终端中输入来了解有关该命令的更多信息。


不习惯此注释部分的Byte Commander ...请继续按回车以更改行,而要发布。您的答案中的轮廓非常清晰。现在,我已经获得有关正确使用可用工具的良好指导,期待着整理这些目录。优秀的。
Edmuntu

@Edmuntu将来,请在评论时使用SHIFT + ENTER向下一行。
TheOdd

@OwenHines只是注释删除了任何换行符和其他空格,将它们放入编辑器不会改变结果。
字节指挥官

@ByteCommander哦,没关系。好吧,现在他知道了。
TheOdd

6

作为通常有用的cp命令的替代方法,您可以使用rsync,它具有复制原始目录结构的权限/时间戳的其他好处:

rsync -av dir/ newdir

-存档-v详细

注意源目录后的斜杠。


5

我发现更容易从最初更改到要复制的目录。在本例中,将目录更改为每个人都已调用的目录/boot。任何人都可以将以下命令复制并粘贴到其终端中。

cd /boot
sudo mkdir /boot_backup
sudo cp -r . /boot_backup
du /boot_backup -h

752K    /boot_backup/extlinux/themes/debian-wheezy
756K    /boot_backup/extlinux/themes
832K    /boot_backup/extlinux
2.5M    /boot_backup/grub/i386-pc
20K     /boot_backup/grub/locale
2.3M    /boot_backup/grub/fonts
7.2M    /boot_backup/grub
565M    /boot_backup

对于该cp命令,当前目录被标识为我们已更改.为的/boot目录。该-r选项使其可以递归地包含所有子目录。

为了确保它的工作运行du列出所有子目录和文件总大小在新目录/boot_backup在这种情况下。

完成本演练之后,请使用:sudo rm -r /boot_backup删除新目录及其子目录。


1
尽管这确实说明了如何将所有文件从当前目录复制到另一个目录,但是它并不能完全回答OPs有关如何将目录(及其内容)复制到其他名称目录的问题。有较短的命令(例如cp -r)将用于创建新目录并将所有文件复制到该目录中
BlueCacti 2016年

1
它确实说明了如何复制和dir及其内容-区别在于,出于预防目的,它首先更改为源目录。cp -r如您所建议,该命令已在第三命令行上。本教程基于以下事实:每个人都有一个/boot目录,可以在自己的计算机上尝试该目录。如果我曾经使用过cp -r /home/GroundZero/Documents /home/GroundZero/Documents_backup阅读器,则无法将其复制并粘贴到其终端中-他们将进行更改,GroundZero从而产生更多的工作和出错的机会。希望您通过嵌入式教程对这个答案的亲吻感到满意。
WinEunuuchs2Unix

1
@GroundZero进行cd ~/Documents/SomeObsucreFolder/2016/Nov/将当前目录设置为源目录的操作将更改终端提示,以确保其拼写正确,然后cp -r .用作源消除了重新键入源目录的麻烦。这只是我认为的好习惯。此外,一旦更改为源目录,就可以很容易地执行ls FIleName1ls FileName2等操作, 以确保要备份的文件在那里,而不必为ls命令重复源目录名称。
WinEunuuchs2Unix

5

您可以使用以下命令将目录从一个位置复制到另一子目录。

cp -Rvp /home/edmuntu/data /home/edmuntu/mydata/

命令说明:

  • -R =递归复制目录
  • v =解释正在做什么
  • p =它将帮助您保留带有时间戳的许可和所有权

谢谢@Rakesh Chauhan。“保留时间戳的权限和所有权” ???哇...。我需要去做!!!!线路命令的另一方面。谢谢您的回复。
Edmuntu '16

4

cp是执行所需功能的命令。它代表复制,它就是这样做的。在这种情况下适合您的命令是

cp -R source/ destination/

这会将source/文件夹及其所有子目录复制到destination/

如果destination/不存在,将创建它。

-R标志代表递归,它指示cp复制所有子目录。


谢谢@Owen Hines。听起来这绝对是我完成任务的命令。干杯
Edmuntu

1
@Edmuntu Glad如果您找到了解决问题的方法,我可以提供帮助,是否可以通过单击下面的对勾标记将对您有用的答案标记为正确的答案?这将有助于提醒其他人查看该页面的问题。
TheOdd

1

通常,在复制时,您希望文件权限保持相同,而不是新的一组默认创建权限。这意味着将-a标志用于cp。

cp -a file filenew
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.