cp não copia arquivos?

1
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

É apenas o primeiro que não copia os arquivos. Eu sei que isso está longe de ser a melhor solução, mas sim, funciona muito bem desde o primeiro cp não copiar. Cada cp, exceto o primeiro, funciona. Eu quero que o primeiro apenas copie arquivos e não entre em diretórios e copie. Acabei de receber o erro

  

cp: omitindo o diretório '/ var / www'

    
por TheMeisterSE 13.05.2015 / 03:00

2 respostas

7

Por padrão, cp não copiará os diretórios. Isso protege você de copiar acidentalmente demais.

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

Para substituir esse padrão, forneça a opção -R :

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

A razão pela qual este foi o único comando que falhou foi que este era o único comando que estava faltando -R .

    
por John1024 13.05.2015 / 03:10
0
A resposta de John1024 responde à pergunta, no entanto, eu diria que o raciocínio não é totalmente preciso. É correto que, por padrão, o comando cp não copie os diretórios, mas a implicação de que isso é principalmente para proteger o usuário de "copiar demais" parece improvável.

O Ubuntu opera um sistema de arquivos no estilo Unix, que usa o conceito de inodes para descrever um filesystem objeto, seja um arquivo ou um diretório.

Um diretório é simplesmente uma lista de nomes atribuídos a inodes . Nesse sentido, a representação visual fornecida pela GUI é um pouco ilusória, ou seja, um diretório não é realmente um 'container' de outros arquivos, mas uma lista de nomes de arquivos e 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

Dessa perspectiva, podemos ver que copiar um diretório simplesmente copiaria uma lista de nomes e associávamos inodes ; Isso seria semelhante a criar um link rígido para o diretório. Esta (provavelmente) não é a intenção real do usuário ao copiar um diretório. Com toda a probabilidade, ao copiar um diretório usando o comando cp , o usuário pretende fazer uma cópia física dos arquivos de dados reais.

Portanto, eu diria que usar a opção -r ao copiar diretórios, torna o comando explícito.

    
por Andrew Hardiman 31.07.2017 / 22:55