2010-07-07 6 views
1

Je fais face à un problème de commande de copie lors de l'exécution script shell dans RHEL 5.commande cp ne sous Linux

commande exécutée est

cp -fp /fir1/dir2/*/bin/file1 `find . -name file1 -print` 
erreur

est

cp: Target ./6e0476aec9667638c87da1b17b6ccf46/file1 must be a directory 

Voulez-vous s'il vous plaît jeter quelques idées pour lesquelles cela échouerait?

Merci Robert.

+2

Ce n'est pas une question de programmation donc devrait vraiment être dans http://superuser.com – Dipstick

+1

@chrisharris: dès que 3 autres personnes voteront pour la migrer, ce sera le cas. –

+1

Que devrait faire la commande? Copier plusieurs fichiers dans un répertoire de destination commun ou concaténer plusieurs fichiers en un? – Philipp

Répondre

1

Vous ne pouvez pas copier plusieurs fichiers multiples dans un fichier, pour un répertoire, à savoir

cp file1 file2 file2 file4 

n'est pas possible, vous avez besoin

cp file1 file2 file2 dir1 
+0

Merci à tous pour vos commentaires. J'ai compris. Je vais aller et changer le code en conséquence. – Robo

3

Vous ne pouvez pas copier de nombreux fichiers à un seul endroit sauf si cet emplacement est un répertoire.

cp devrait être utilisé ainsi: cp sourcefile destinationfile ou cp source1 source2 destinationdir.

5

Lorsque cp est appelé avec plus de deux noms de fichiers en tant qu'arguments, il traite le dernier en tant que répertoire cible et copie tous les fichiers nommés dans les autres arguments dans ce répertoire cible. Ainsi, par exemple,

cp file1 file2 dir3 

va créer dir3/file1 et dir3/file2. Il semblerait que dans votre cas, le modèle /fir1/dir2/*/bin/file1 correspond à plus d'un nom de fichier, aussi cp essaie de traiter le résultat de find comme un répertoire cible - et ce n'est pas - et en panne.

2

Comme les autres ont dit que vous ne pouvez pas copier plusieurs fichiers dans un fichier en utilisant cp. D'un autre côté, si vous souhaitez ajouter le contenu de plusieurs fichiers ensemble dans un fichier de destination, vous pouvez utiliser cat.

Par exemple:

cat file1 file2 file3 > destinationfile 
2

il est difficile de répondre sans savoir ce que vous essayez d'atteindre.

Si, par exemple, vous souhaitez copier tous les fichiers nommés « fichier1 » dans une structure de répertoire à un endroit cible/tmp, la construction de la même structure de répertoires là, cette commande fera l'affaire:

cd /dir1/dir2 
find . -name file1 | cpio -pvd /tmp