O que significa "cp: omitting directory"?

408

Eu emiti o seguinte comando:

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

Quando faço isso, começo a receber as seguintes mensagens:

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' 

e assim por diante...

Por que recebo essas mensagens?

MEM
fonte

Respostas:

536

Por padrão, cpcopia apenas os arquivos diretos e não os subdiretórios no diretório. A mensagem cp: omitting directory 'directory'avisa que o diretório mencionado não é copiado.

Para fazer isso, especifique a opção -r(ou --recursive):

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

A página do manual (comando man cp:) contém uma visão geral das opções disponíveis.

Lekensteyn
fonte
2
Muito obrigado. Eu pensei que * iria lidar com isso recursivamente de alguma forma. Mas não. : D Obrigado novamente. :)
MEM
11
@MEM: o *é expandido pelo Bash, não por cp. Teste você mesmo colocando echo na frente do seu comando. Quando expandido, combina tudo com o anterior ...library/Zend/(os arquivos e diretórios nele).
Lekensteyn
A boa notícia é que omitting directory 'directory'isso não significa que está excluindo esse diretório.
Bishwas Mishra
@Lekensteyn eu estava tentando copiar o conteúdo de um usuário para outro. Então eu ganhei permissão do usuário chmod a+rx ~/depois que tentei copiar com cp /home/2110/* /home/2111/ele produz um erro que indica permissão negada. onde eu estava errado. Desculpe comentar, porque eu não posso fazer perguntas duplicadas. eu espero pela resposta rápida :)
jasinth Premkumar
@jasinthpremkumar Os arquivos in /home/2110pertencem ao usuário 2110, enquanto os arquivos in /home/2111pertencem ao 2111. Para definir o proprietário, use algo como sudo chown -R 2111 /home/2111.
21418 Lekensteyn
40

A mensagem significa que cpnão copiou os diretórios listados. Esse é o comportamento padrão para cp- apenas os arquivos são copiados normalmente, independentemente de você estar especificando-os explicitamente ou usando *. Se você deseja copiar diretórios, use a -ropção que significa "recursiva".

Roger Light
fonte
16

Algumas coisas aqui que precisam ser verificadas:

  1. Não use sudo. Você não precisa, você já tem permissão para escrever coisas em seu próprio diretório pessoal.

  2. Você pode visualizar facilmente arquivos e diretórios ocultos no gerenciador de arquivos gráfico, selecionando Exibir / Mostrar arquivos ocultos no menu. Ou pressionando Ctrl- H.

  3. Você precisa usar a -Ropção no cpcomando para copiar um diretório e seu conteúdo.

  4. / home não é seu diretório pessoal. / home / nome de usuário é. Então você provavelmente está tentando copiar do lugar errado.

  5. O shell diferencia maiúsculas de minúsculas, portanto ~ / downloads e ~ / Downloads são duas coisas diferentes.

Nikunj K.
fonte
2

Quando você está copiando um diretório como:

cp dir1 copy_of_dir1

Você está apenas e exatamente copiando o dir1arquivo em si e não os arquivos nele; portanto, no final, você terminará com uma nova estrutura de diretórios enquanto a estrutura não existir.

Em outras palavras, depois de ter sido copiado, ele vai dizer que os meus conteúdos é file1, file2, etc; No entanto, esses arquivos não foram copiados e, portanto, não existem nele.

Portanto, para corrigir esse problema que pode surgir cppor padrão, não copie os diretórios e os ignore, a menos que você especifique a -ropção que copia todos os arquivos também recursivamente.

Ravexina
fonte
1

A razão omitting directoryé porque cptodos os utilitários de cópia que eu conheço criam uma lista de arquivos e subdiretórios a serem copiados antes de começar a copiar os arquivos. Quando as --recursiveopções estão ausentes, os subdiretórios são eliminados desta lista. Dessa forma, omitir refere-se à remoção da lista de cópias, não da mídia de origem. Eu acredito que isso aborda o significado da mensagem.

endrias
fonte
0

O comando cp é usado para copiar arquivos e diretório, não os diretórios aninhados, se você deseja copiar diretórios de aninhamento, é possível adicionar -r depois disso, em que -r significa recursivo.

Sintaxe que você pode seguir (executando como root):

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

ou

cp --recursive /source/dir/* /destination/
itsguri
fonte
0

omitirá os subdiretórios em primeira instância se você não estiver usando o sinalizador -r, que faz cópias recursivas.

destino de origem cp -r

-r diga para fazer recursivamente. Significado para copiar tudo o que está nas pastas etc.

sunilyadav0201
fonte
1
Esta resposta é uma duplicata da resposta existente: askubuntu.com/a/1165846
karel
-1

Suponha que você tenha dois diretórios 'Tag' e 'Test'

Se você deseja copiar o diretório 'Tag' para o diretório 'Test', use o comando

$ : cp -r Tag Test (case sensitive)

Principalmente o problema será resolvido com o código acima, se não, e você receberá a mensagem abaixo como

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

adicione alguns arquivos no diretório 'Tag' e copie-os para 'Teste'. Na verdade, eu tenho o mesmo problema, mas resolvi como o que eu disse em segundo lugar.

jainmiah shaik
fonte