Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/06/2007, 00h53   #1
Rédacteur
 
Inscription : juillet 2004
Messages : 2 573
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2004
Messages : 2 573
Points : 1 973
Points : 1 973
Par défaut Soucis avec la commande cp

Bonjour

J'ai un répertoire "truc" qui contient des fichiers et d'autres répertoires. Je souhaite copier dans le répertoire "test" tous les fichiers se trouvants dans "truc" mais uniquement les fichiers.
Au départ, j'avais pensé à une commande genre:
J'obtiens des messages :
Code :
cp: mail is a directory (not copied)
ce qui est normal me direz-vous

Pourriez-vous me rappeler l'option qui va bien svp ? la page de man de la commande cp sur ma FreeBSD est très petite

Merci à l'avance
__________________
.Olivier
Olivier Regnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 02h52   #2
Membre émérite
 
Inscription : juin 2006
Messages : 1 117
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juin 2006
Messages : 1 117
Points : 989
Points : 989
peut être quelque chose comme
Code :
for i in * ; do if [ -f $i ] ; then cp $i /repertoire_cible ; fi ; done
mais comme cp ne copie pas les répertoires, il sera difficile voir imposible d'en copier dans le répertoire cible en omettant l'option -r (pour copie récursive). Ils seront occultés par le message d'erreur que tu nous as donné lors du processus de copie. Les variantes pour copier exclusivement les répertoires avec cp -rv utilisent [ -d $i ] pour vérifier que $i est un répertoire.

Pour une utilisation plus compliquée, peut être que man find marchera. En tous cas, sous Unix je crois que man n'est pas vraiment la commande standard. Il faut peut être faire des choses comme ou j'avais vu aussi l'utilisation de xargs avec find pour le listage récursif, par exemple en faisant
Code :
for i in $(find ./ -type f | xargs -d "\n") ; do
qui copie fichier par fichier tous les fichiers dans le même répertoire de destination, sans tenir compte de leur position dans l'arborescence initiale.
kromartien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 08h26   #3
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 546
Points : 7 776
Points : 7 776
Code :
find -P source/ -depth -type f -exec cp -p {} desstination/ \;
copie fichier par fichier tous les fichiers dans le même répertoire de destination, sans tenir compte de leur position dans l'arborescence initiale. aussi mais beaucoup plus vite et simplement
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 13h59   #4
Rédacteur
 
Inscription : juillet 2004
Messages : 2 573
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2004
Messages : 2 573
Points : 1 973
Points : 1 973
Citation:
Envoyé par frp31
Code :
find -P source/ -depth -type f -exec cp -p {} desstination/ \;
Il y a quand même un petit soucis avec la commande find. J'ai un répertoire caché qui comporte deux scripts. find va copier ces deux fichiers dans le répertoire test.

Existe-il une option pour exclure le répertoire caché ?

Merci
__________________
.Olivier
Olivier Regnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 16h30   #5
Rédacteur
 
Inscription : juillet 2004
Messages : 2 573
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2004
Messages : 2 573
Points : 1 973
Points : 1 973
Je viens de trouver la solition:
Code :
find -P $src/etc/ -path '*.scripts/*' -prune -o -path '*periodic/*' -prune -o -depth -type f -exec cp -p {} /etc/ \;
++
__________________
.Olivier
Olivier Regnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2007, 00h23   #6
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 546
Points : 7 776
Points : 7 776
je prend note
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2007, 20h44   #7
Membre émérite
 
Inscription : juin 2006
Messages : 1 117
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juin 2006
Messages : 1 117
Points : 989
Points : 989

ah une seconde monsieur je n'arrive plus à suivre là
--
c'est vrai que le man de find est assez gros
kromartien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2007, 10h39   #8
Rédacteur
 
Inscription : juillet 2004
Messages : 2 573
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2004
Messages : 2 573
Points : 1 973
Points : 1 973
Bonjour

Est-il possible avec la commande find d'exécuter plusieurs commandes à la suite ?

Exemple:
Code :
find /tmp/base/files/scripts/ -type f -exec chmod 755 {} \;
Je souhaite copier ces fichiers dans /usr/local/etc
avec la commande:
Avez-vous une idée ?

Merci
__________________
.Olivier
Olivier Regnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2007, 17h14   #9
Rédacteur
 
Avatar de Arnaud F.
 
Homme Arnaud Feltz
Développeur .NET
Inscription : août 2005
Messages : 5 204
Détails du profil
Informations personnelles :
Nom : Homme Arnaud Feltz
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Transports

Informations forums :
Inscription : août 2005
Messages : 5 204
Points : 6 113
Points : 6 113
Ca doit être possible

++

[edit] Ca donnerai :
Code :
1
2
 
find /tmp/base/files/scripts/ -type f -exec chmod 755 {} \; | xargs cp -p /usr/local/etc/
__________________
C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

Installation de Code::Blocks sous Debian à partir de Nightly Builds
Arnaud F. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2007, 11h35   #10
Rédacteur
 
Inscription : juillet 2004
Messages : 2 573
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2004
Messages : 2 573
Points : 1 973
Points : 1 973
Je croyais que xargs pouvait faire mon bonheur hélas non

J'ai un répertoire dont tous les fichiers sont exécutables sauf deux scripts perl. Je souhaite retirer les droits d'exécution à tous les fichiers et les attribuer à mes 2 scripts perl.
J'ai tenté avec cette commande:
Code :
1
2
3
 
src="/root/test/"
find $src -path '*.pl' -prune -o -type f -exec chmod a-x {} \; | xargs chmod -R 755 *.pl
Les droits d'exécution sont bien retirés en revanche les 2 scripts perl restent inchangés

Pouvez-vous me donner un coup de main svp ?

Merki
__________________
.Olivier
Olivier Regnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2007, 11h55   #11
Rédacteur
 
Avatar de Arnaud F.
 
Homme Arnaud Feltz
Développeur .NET
Inscription : août 2005
Messages : 5 204
Détails du profil
Informations personnelles :
Nom : Homme Arnaud Feltz
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Transports

Informations forums :
Inscription : août 2005
Messages : 5 204
Points : 6 113
Points : 6 113
Y faut regarder les options de xargs, j'suis sur tu peux le faire avec

Seulement faut savoir sous quelle forme son renvoyé les résultats de la commande find

++
__________________
C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

Installation de Code::Blocks sous Debian à partir de Nightly Builds
Arnaud F. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2007, 22h59   #12
Rédacteur
 
Inscription : juillet 2004
Messages : 2 573
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2004
Messages : 2 573
Points : 1 973
Points : 1 973
Je n'ai pas cherché avec xargs mais j'ai adapté mon script et la bonne nouvelle, pas besoin d'utiliser Find

Merki

PS: lorsque j'aurai un peu de temps devant moi, je me pencherai sur ce problème.
__________________
.Olivier
Olivier Regnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h47.


 
 
 
 
Partenaires

Hébergement Web