在Linux中复制目录–如何在Linux和Unix(MacOS)中的命令行中使用cp文件夹

约翰·摩西曼(John Mosesman)

要在基于Unix的操作系统(Linux和MacOS)中复制文件或目录,请使用以下cp命令。

cp命令是一个相对简单的命令,但是其行为会根据输入(文件或目录)和传递给它的选项而略有变化。

要查看该cp命令的文档或手册,请man cp在您的终端上运行:

$ man cp

NAME
     cp -- copy files

SYNOPSIS
     cp [OPTIONS] source_file target_file
     cp [OPTIONS] source_file ... target_directory

...

此命令的基本形式采用要复制的一个或多个输入源(文件或目录),以及将文件或目录复制到的目标:

cp [OPTIONS] source_file target_file

如何将文件复制到当前目录

要复制文件,请传递要复制的文件以及要将文件复制到的路径。

如果您有一个名为的文件a.txt,并且想要该文件的副本b.txt

$ ls
a.txt

$ cp a.txt b.txt

$ ls
a.txt   b.txt

如果您不熟悉该ls命令,请ls“列出”目录的所有内容。

默认情况下,该cp命令使用您的 当前目录作为路径。

如何将文件复制到另一个目录

要将文件复制到与当前目录不同的目录,您只需要传递另一个目录的路径作为目标即可:

$ ls ../directory-1/

$ cp a.txt ../directory-1/

$ ls ../directory-1/
a.txt

执行该cp  命令后,以前为空directory-1的文件现在包含a.txt

默认情况下,复制的文件会收到原始文件的名称,但是您也可以选择传递文件名:

$ cp a.txt ../directory-1/b.txt

$ ls ../directory-1/
b.txt

如何将多个文件复制到目录

要一次复制多个文件,可以传递多个输入源和一个目录作为目标:

$ ls ../directory-1/

$ cp first.txt second.txt ../directory-1/

$ ls ../directory-1/
first.txt       second.txt

在这里,两个输入源(first.txtsecond.txt)都被复制到目录中directory-1

注意:传递多个源时,最后一个参数必须是目录。

如何将目录复制到另一个目录

如果尝试将目录作为输入源,则会出现此错误:

$ cp directory-1 directory-2
cp: directory-1 is a directory (not copied).

要复制目录,您需要添加-r(或-R)标志,它是以下内容的简写--recursive

$ ls directory-1
a.txt

$ cp -r directory-1 directory-2

$ ls
directory-1          directory-2

$ ls directory-2
a.txt

在这里,directory-1包含文件的文件a.txt被复制到一个名为directory-2—的新目录中,该目录现在还包含file a.txt

如何复制整个目录与目录内容

复制目录时有一个有趣的极端情况:如果目标目录已经存在,则可以通过在输入中添加或删除尾随来选择是复制目录的内容还是整个目录的内容/

这是页面-R选项的描述man

如果source_file指定目录,则cp复制该目录以及此时连接的整个子树。如果source_file以/结尾,则复制目录的内容,而不是目录本身。

如果要将目录的内容仅复制到另一个目录,/请在输入中添加尾随。

如果要将目录的内容和目录文件夹本身复制到另一个目录,请不要添加结尾/

$ ls
directory-1          directory-2

$ ls directory-2

$ cp -r directory-1 directory-2

$ ls directory-2
directory-1

$ ls directory-2/directory-1
a.txt

在这里,您可以看到由于directory-2已经存在,并且输入源没有尾随因此目录/的内容directory-1 目录本身都已复制到目标中。

如何防止覆盖文件 cp

默认情况下,该cp命令将覆盖现有文件:

$ cat a.txt
A

$ cat directory-1/a.txt
B

$ cp a.txt directory-1/a.txt

$ cat directory-1/a.txt
A

如果您不熟悉cator或“ concatenate”命令,它将打印文件的内容。

有两种方法可以防止这种情况。

交互式标志

要在即将发生覆盖时提示您,可以添加-i--interactive标志:

$ cp -i a.txt directory-1/a.txt
overwrite directory-1/a.txt? (y/n [n])

断断续续的标志

或者,为防止覆盖而没有提示,可以添加-n--no-clobber标志:

$ cat a.txt
A

$ cat directory-1/a.txt
B

$ cp -n a.txt directory-1/a.txt

$ cat directory-1/a.txt
B

在这里,您可以看到由于该-n标志的内容directory-1/a.txt并未被覆盖。

其他选择

还有许多其他有用的选项可以传递给cp命令:例如-v用于“详细”输出或-f用于“强制”。

 

点击阅读全文

本文来自投稿,不代表微擎百科立场,如若转载,请注明出处:https://www.w7.wiki/develop/5163.html

发表评论

登录后才能评论