Que signifie “cp: omitting directory”?

408

J'ai émis la commande suivante:

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

Lorsque je fais cela, je commence à recevoir les messages suivants:

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' 

etc...

Pourquoi est-ce que je reçois ces messages?

MEM
la source

Réponses:

536

Par défaut, cpcopie uniquement les fichiers directs, et non les sous-répertoires du répertoire. Le message cp: omitting directory 'directory'vous avertit que le répertoire mentionné n'est pas copié.

Pour ce faire, spécifiez l' option -r(ou --recursive):

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

La page de manuel (commande:) man cpcontient un aperçu des options disponibles.

Lekensteyn
la source
2
Merci beaucoup. Je pensais que * le traiterait d'une manière ou d'une autre récursive. Mais non. : D Merci encore. :)
MEM
11
@MEM: le *est développé par Bash, pas par cp. Testez-le vous-même en le mettant echo devant votre commande. Lorsqu'il est développé, il correspond à tout ce qui précède ...library/Zend/(les fichiers et les répertoires qu'il contient).
Lekensteyn
La bonne nouvelle est que omitting directory 'directory'cela ne signifie pas qu'il supprime ce répertoire.
Bishwas Mishra
@Lekensteyn, j'essayais de copier le contenu d'un utilisateur sur un autre. Alors, j'ai obtenu la permission d'un utilisateur chmod a+rx ~/après que j'ai essayé de copier avec cp /home/2110/* /home/2111/elle produit une erreur qui indique la permission refusée. où je me suis trompé. désolé de commenter car je ne peux pas poser de questions en double. J'espère une réponse rapide :)
jasinth premkumar
@jasinthpremkumar Les fichiers dans /home/2110appartiennent à l'utilisateur 2110, tandis que les fichiers /home/2111sont censés appartenir à 2111. Pour définir le propriétaire, utilisez quelque chose comme sudo chown -R 2111 /home/2111.
Lekensteyn
40

Le message signifie que cela cpn'a pas copié les répertoires listés. C'est le comportement par défaut pour cp- seuls les fichiers sont copiés normalement, que vous les spécifiiez explicitement ou que vous les utilisiez *. Si vous voulez copier des répertoires, utilisez le -rcommutateur qui signifie "récursif".

Roger Light
la source
16

Un couple de choses ici qui doivent vérifier:

  1. Ne pas utiliser sudo. Vous n'en avez pas besoin, vous disposez déjà des autorisations nécessaires pour écrire des éléments dans votre propre répertoire personnel.

  2. Vous pouvez facilement afficher les fichiers et les répertoires cachés dans le gestionnaire de fichiers graphique en sélectionnant Afficher / Afficher les fichiers cachés dans le menu. Ou en appuyant sur Ctrl- H.

  3. Vous devez utiliser l' -Roption de la cpcommande pour copier un répertoire et son contenu.

  4. / home n'est pas votre répertoire personnel. / home / nom d'utilisateur est. Donc, vous essayez probablement de copier du mauvais endroit.

  5. Le shell est sensible à la casse, donc ~ / downloads et ~ / Downloads sont deux choses différentes.

Nikunj K.
la source
2

Lorsque vous copiez un répertoire tel que:

cp dir1 copy_of_dir1

Vous ne faites que copier exactement dir1le fichier lui - même et non les fichiers qu’il contient. Ainsi, vous obtiendrez une nouvelle structure de répertoires alors que celle-ci n’existe pas.

En d' autres termes après qu'il a été copié il va dire que mon contenu est file1, file2etc; Cependant, ces fichiers n’ont pas été copiés et n’existent donc pas.

Donc, pour résoudre ce problème qui peut survenir cppar défaut, ne copie pas les répertoires et les ignore, sauf si vous spécifiez une -roption qui copie également tous les fichiers de manière récursive.

Ravexina
la source
1

Cela s’explique par le omitting directoryfait que cptous les utilitaires de copie, à ma connaissance, créent une liste de fichiers et de sous-répertoires à copier avant de commencer à copier les fichiers. Lorsque les --recursiveoptions sont manquantes, les sous-répertoires sont supprimés de cette liste. En tant que tel, omettre se réfère à la suppression de la liste de copie, pas de votre support source. Je crois que cela aborde la signification du message.

Endrias
la source
0

La commande cp est utilisée pour copier des fichiers et des répertoires, pas les répertoires imbriqués, si vous souhaitez copier des répertoires imbriqués, vous pouvez ajouter -r après cela, où -r signifie récursif.

Syntaxe que vous pouvez suivre (en tant que root):

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

ou

cp --recursive /source/dir/* /destination/
itsguri
la source
-1

Supposons que vous ayez deux répertoires "Tag" et "Test"

Si vous souhaitez copier le répertoire 'Tag' dans la commande d'utilisation du répertoire 'Test'

$ : cp -r Tag Test (case sensitive)

Généralement, le problème sera résolu avec le code ci-dessus sinon, et vous obtenez un message ci-dessous comme

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

Ajoutez ensuite des fichiers dans le répertoire "Tag", puis copiez-les dans "Test". En fait, j'ai le même problème mais résolu comme ce que j'ai dit en second lieu.

Jainmiah Shaik
la source