“ cp:省略目录”是什么意思?


408

我发出了以下命令:

sudo cp ~/Transfers/ZendFramework-1.11.4-minimal/library/Zend/* ~/public_html/cmsk.dev/library/

当我这样做时,我开始收到以下消息:

cp: omitting directory `Tag' 
cp: omitting directory `Test' 
cp: omitting directory `Text' 
cp: omitting directory `TimeSync' 
cp: omitting directory `Tool' 
cp: omitting directory `Translate' 
cp: omitting directory `Uri' 
cp: omitting directory `Validate' 

等等...

为什么会收到这些消息?

Answers:


535

默认情况下,cp仅复制目录中的直接文件,而不复制目录中的子目录。该消息cp: omitting directory 'directory'警告您未复制提到的目录。

为此,请指定-r(或--recursive)选项:

sudo cp -r ~/Transfers/ZendFramework-1.11.4-minimal/library/Zend/* ~/public_html/cmsk.dev/library/

手册页(命令:man cp),其中包含可用选项的概述。


2
非常感谢。我认为*将以某种方式递归处理它。但不是。:D再次感谢。:)
MEM

11
@MEM:*由Bash扩展,而不由扩展cp。放在echo 命令前面,自己进行测试。展开后,它会将所有内容都与前面的内容...library/Zend/(其中的文件和目录)匹配。
Lekensteyn 2011年

好消息是,omitting directory 'directory'这并不意味着它正在删除该目录。
比什瓦斯·米什拉

@Lekensteyn我试图将一个用户的内容复制到另一位用户。因此chmod a+rx ~/我尝试用cp /home/2110/* /home/2111/它复制后,获得了用户的许可,这会产生错误,指出权限被拒绝。我错了。很抱歉发表评论,因为我不能问重复的问题。我希望得到快速回复:)
jasinth premkumar

@jasinthpremkumar中的文件/home/2110由用户2110拥有,而其中的文件/home/2111应由2111拥有。要设置所有者,请使用sudo chown -R 2111 /home/2111
Lekensteyn

40

该消息表示cp尚未复制列出的目录。这是cp仅复制普通文件的默认行为,而不管您是显式指定还是使用*。如果要复制目录,请使用-r表示“递归” 的开关。


16

这里需要检查的几件事情:

  1. 不要使用sudo。您不需要它,您已经具有在自己的主目录中编写内容的权限。

  2. 通过从菜单中选择“查看/显示隐藏文件”,可以轻松地在图形文件管理器中查看隐藏文件和目录。或按Ctrl- H

  3. 您需要使用命令中的-R选项cp来复制目录及其内容。

  4. / home不是您的主目录。/ home /用户名是。因此,您可能正在尝试从错误的位置进行复制。

  5. Shell区分大小写,因此〜/ downloads和〜/ Downloads是两回事。


2

当您复制目录时,例如:

cp dir1 copy_of_dir1

您只是在完全复制dir1自身而不是其中的文件,因此最后,您将获得一个新的目录结构,而该结构不存在。

换句话说,它已经被复制后,它会说,我的内容是file1file2等; 但是,这些文件尚未复制,因此不存在。

因此,要解决cp默认情况下可能出现的此问题,将不会复制目录并跳过它们,除非您指定了-r也以递归方式复制所有文件的选项。


1

之所以这样说,omitting directory是因为cp我所知道的所有复制实用程序都会在开始复制文件之前创建要复制的文件和子目录的列表。如果--recursive缺少这些选项,则子目录会从该列表中移出。因此,省略是指从副本列表中删除,而不是从您的源媒体中删除。我相信这解决了消息的含义。


0

CP命令用于复制文件和目录,而不是嵌套的目录,如果你要复制的嵌套目录,那么您可以添加-r后,其中-r表示递归。

您可以遵循的语法(以超级用户身份运行):

cp -r /source/dir/* /destination/ 

要么

cp --recursive /source/dir/* /destination/

-1

假设您有两个目录“ Tag”和“ Test”

如果要将“标记”目录复制到“测试”目录,请使用命令

$ : cp -r Tag Test (case sensitive)

如果没有,通常问题将通过上述代码解决,您将收到以下消息,例如

cp: omitting directory `Tag' 
cp: omitting directory `Test'

然后在'Tag'目录中添加一些文件,然后将其复制到'Test'中。实际上,我有同样的问题,但解决了,就像我第二次说的那样。

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.