cp 没有复制文件?

cp 没有复制文件?
cp -v /var/www /var/www/dev
cp -vR /var/www/admin /var/www/dev
cp -vR /var/www/cron /var/www/dev
cp -vR /var/www/css /var/www/dev
cp -vR /var/www/files /var/www/dev
cp -vR /var/www/images /var/www/dev
cp -vR /var/www/js /var/www/dev
cp -vR /var/www/medlem /var/www/dev
cp -vR /var/www/snippets /var/www/dev

只有第一个不复制文件。我知道这远非最佳解决方案,但确实,除了第一个 cp 不复制之外,它运行良好。除第一个 cp 外,每个 cp 都可以工作。我希望第一个只复制文件,而不是进入目录并复制。我只是收到错误

cp:省略目录 '/var/www'

答案1

默认情况下,cp不会复制目录。这可以防止您意外复制过多内容。

$ cp -v /var/www /var/www/dev
cp: omitting directory `/var/www'

要覆盖此默认值,请提供以下-R选项:

$ cp -vR /var/www /var/www/dev
`/var/www' -> `/var/www/dev/www'

这是唯一失败的命令,原因是这是唯一缺失的命令-R

答案2

John1024 的回答确实回答了这个问题,但是,我认为这个推理并不完全准确。默认情况下,该cp命令不会复制目录,这是正确的,但是这主要是为了防止用户“复制太多”,这种暗示似乎不太可能。

Ubuntu 运行的是 Unix 风格的文件系统,它使用以下概念:inodes描述一个filesystem对象,无论是文件还是目录。

目录只是分配给 的名称列表inodes。从这个意义上讲,GUI 提供的视觉表示有点错觉,即目录实际上不是其他文件的“容器”,而是文件名和 的列表inode pointers

.....a directory entry contains only a name for the associated file and a pointer 
to the file itself. This pointer is an integer called the i-number (for index 
number) of the file. When the file is accessed, its i-number is used as an index 
into a system table (the i-list) stored in a known part of the device on which the 
directory resides. The entry found thereby (the file's i-node) contains the 
description of the file:...
   — The UNIX Time-Sharing System, The Bell System Technical Journal, 1978

从这个角度来看,我们可以看到复制目录只会复制名称列表及其相关内容inodes;这类似于创建指向目录的硬链接。这(可能)不是用户复制目录时的实际意图。很有可能,当使用命令复制目录时cp,用户打算对其中的实际数据文件进行物理复制。

因此,我认为-r在复制目录时使用该选项可以使命令变得明确。

相关内容