Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Unix
Unix Forum d'entraide sur les systèmes Unix et dérivés (*BSD, AIX, etc.). Avant de poster ->F.A.Q BSD F.A.Q. Aix
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 23/04/2007, 15h32   #1
Membre à l'essai
 
Inscription : avril 2007
Messages : 36
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : avril 2007
Messages : 36
Points : 20
Points : 20
Par défaut [UNIX] recherche de fichier

Bonjour,

je travaille a partir d'anciens repertoires que m'ont laisse mes predecesseurs. Je dois reccuperer un groupe de fichiers du genre nom1*, nom2* etc parmi un grand nombre de repertoires et de sous repertoires.

Les fichiers en question sont ou non presents.. Comment faire pour copier seulement les fichies en question a un autre endroit mais en conservant le nom des repertoires et leurs arborescence. Accessoirement si le repertoire et aucun de ses sous repertoires ne contiennent l'un des fichiers il ne m'interesse pas.

Dans l'idee je saurais faire mais je ne connais presque pas unix.
Une biere bien fraiche par chronopost a mon sauveur
loique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 17h50   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Code :
find /répertoire/base \( -name "nom1*" -o -name "nom2*" \) -exec ~/copie_speciale.sh /répertoire/cible {} \; -print
~/copie_speciale.sh :
Code :
1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh

# Paramètre 1 : le répertoire de base pour la copie
# Paramètre 2 : le chemin complet du fichier à copier

if [ $# = 2 -a -d $1 ];
then
        destrep=${1%/}`dirname $2`
        mkdir -p $destrep
        cp $2 $destrep
fi
Je crois que l'idée est là
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 10h06   #3
Membre à l'essai
 
Inscription : avril 2007
Messages : 36
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : avril 2007
Messages : 36
Points : 20
Points : 20
Merci pour ta rapidite

ca ne marche pas !

Deja je dois preciser que je tourne avec ksh (je sais pas si ca change quelquechose...).
Je me suis donc permis de remplacer sh en ksh dans le script...

Le message d'erreur est le suivant
Citation:
find : bad option nomdefichier2
.

Sinon j'ai essaye de faire marcher le script copie_speciale a la main sur un ou deux repertoires. Il cree les repertoires mais ne copie pas les fichiers voulus dedans ?!

Quel est le probleme : moi ou la machine ?
loique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 12h40   #4
Expert Confirmé
 
Avatar de Katyucha
 
Inscription : mars 2004
Messages : 3 109
Détails du profil
Informations personnelles :
Âge : 31
Localisation : Allemagne

Informations forums :
Inscription : mars 2004
Messages : 3 109
Points : 3 313
Points : 3 313
Citation:
Envoyé par julp
Je crois que l'idée est là
Il t'a donné l'idée, faut chercher un peu soi même aussi
__________________
Ancien Rédacteur Linux && Unix / Nouveau retraité de DVP
The UNIX way of sex:
gunzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep

Je ne réponds ni aux messages privées, ni aux messages plein de fautes...
Katyucha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 14h35   #5
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Désolé j'ai oublié une option -name lorsque j'ai recopié la commande (je n'étais pas sur la même machine). Vous avez nécessairement un shell /bin/sh qui peut en réalité en désigner un autre qui est compatible : c'est notamment le cas sous Linux puisque généralement /bin/sh est un lien symbolique vers /bin/bash.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 15h46   #6
Membre à l'essai
 
Inscription : avril 2007
Messages : 36
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : avril 2007
Messages : 36
Points : 20
Points : 20
Par défaut la reponse d'un copain


je suis tombe sur le bon type a midi. Voila sa solution :
Citation:
find repertoire_source -name "nom_fichier" | xargs cp --parent --target-directory=repertoire_cible
Si le cp ne marche pas, faut utiliser le script suivant en plus :
Citation:
#! /bin/sh

dest=$1
shift
cp $* $1
Le rendre executable et l'utiliser dans la commande a la place de cp.
Dsle la biere ne sera pas pour vous. Merci quand meme.
loique 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 10h31.


 
 
 
 
Partenaires

Hébergement Web