Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/12/2011, à 00:13

metalux

[Résolu] Find-Omettre le dernier répertoire

Bonsoir,
Je débute en script bash cette semaine, soyez indulgent S.V.P.
J'ai parcouru le manuel de Find en long et en large et je n'arrive pas à omettre le dernier répertoire. Il y a bien l'option -maxdepth mais celle-ci est un nombre entier, or, la profondeur de mes sous-répertoires n'est pas forcément la même. J'ai également vu l'option -prune qui pourrait  peut-être m'aider mais je ne vois pas comment l'utiliser.
Est-ce possible avec find?

Dernière modification par metalux (Le 08/12/2011, à 00:19)

Hors ligne

#2 Le 05/12/2011, à 00:42

backtolinux

Re : [Résolu] Find-Omettre le dernier répertoire

Salut,
je vois pas pourquoi. Mais c'est pas mon problème.
Déjà se pose la question de "qu'appelle-tu le dernier répertoire ? le dernier dans la profondeur ou le dernier dans une branche ou le dernier de la racine ?
Une solution est de lister récursivement tes répertoires dans un fichier, tu supprime la dernière ligne du fichier et tu exécute ton find sur le dit fichier contenant uniquement les répertoires désirés (ls -Rl>fichier;cat fichier|while read line;do;find $line -exec ls{} \; je crois), et en plus c'est évolutif avec des expressions régulières :`sed -e "s/nim//g" fichier`|while read line;do;find $line -exec rm{} \;)
Par exemple un find sélectif : tout le système de fichier sauf /dev ni /proc, il suffit de les enlever du listing.

Etc..


FW(2NICs) : Mandriva2010.2 x64 + 3DVB-S+Phoenix(039) (abonné C+, CSat, Freebox V6) + SSD 96Go + 2To SATA (0.5 + 1.5)
HPTC : Mandriva2010.2 x86 + 2DVB-S client du FW
HTPC-Client : Optiplex GX520+Mandriva2010.2 x86 + XBMC
2 stations XP-SP3

Hors ligne

#3 Le 05/12/2011, à 01:01

metalux

Re : [Résolu] Find-Omettre le dernier répertoire

qu'appelle-tu le dernier répertoire

C'est le dernier dans la profondeur à partir du répertoire sélectionné.
Effectivement, je ne cherchais pas dans la bonne direction. Je pensais qu'il existait un moyen plus simple directement avec find et l'option maxdepth ou mindepth en attribuant une valeur négative par exemple.
Je vais regarder ça de plus près. Merci.

Hors ligne

#4 Le 05/12/2011, à 01:11

backtolinux

Re : [Résolu] Find-Omettre le dernier répertoire

reste dans la logique linux/unix : tout est fichier. Donc passe par des fichiers qui seront le résultat intermédiaire, tu garde des traces, tu peux corriger à la main en plein milieu d'exécution ou l'interrompre, plein d'avantage quoi.


FW(2NICs) : Mandriva2010.2 x64 + 3DVB-S+Phoenix(039) (abonné C+, CSat, Freebox V6) + SSD 96Go + 2To SATA (0.5 + 1.5)
HPTC : Mandriva2010.2 x86 + 2DVB-S client du FW
HTPC-Client : Optiplex GX520+Mandriva2010.2 x86 + XBMC
2 stations XP-SP3

Hors ligne

#5 Le 07/12/2011, à 19:55

pingouinux

Re : [Résolu] Find-Omettre le dernier répertoire

Bonsoir,
Ceci devrait convenir :

find repertoire_de_depart -type d | while read rep; do echo $(dirname "$rep"); done | sort -u

On prend tous les répertoires de l'arborescence. Le dirname fait remonter d'un répertoire. Il ne reste plus qu'à supprimer les doublons.

Hors ligne

#6 Le 07/12/2011, à 23:01

metalux

Re : [Résolu] Find-Omettre le dernier répertoire

Bonsoir pingouinux,

merci pour cette alternative à celle de backtolinux. Je n'ai pas encore eu le temps d'approfondir suffisamment ses conseils mais ton approche me semble beaucoup plus simple au premier abord. Comme je débute, peux-tu me dire si j'ai bien compris ta commande(je ne sais pas encore si je vais persister vu le temps que ça prends à se documenter mais l'aide de la communauté me permet d'apprendre beaucoup + vite et je compte m'accrocher!) :
find repertoire_de_depart -type d commande find classique sur répertoire
while read rep s'applique à tous les répertoires récursivement jusqu'à ce qu'il n'en trouve plus
do echo $(dirname "$rep"); done remonte d'un répertoire (ça j'ai compris,tu me l'a expliqué).
sort -u tri les doublons je suppose? Là je n'ai pas trop compris dans le man l'option -u, et pourquoi y aurait-il des doublons?
Je n'ai pas trop compris non plus l'utilisation du premier pipe. Tu vas me dire de me documenter mais je n'arrête pas depuis quelques jours (les nuits sont courtes et les journées de travail trop longues ces jours-ci!). J'ai simplement compris qu'un pipe redirige la sortie de la 1ere commande vers l'entrée de la deuxième (et là, je comprends le deuxième pipe de la commande).
Je ne sais pas si tu auras eu le courage de me lire jusqu'au bout, mais si c'est le cas, j'attends tes conseils avec impatience.

@backtolinux: Je n'abandonne pas tes conseils mais avant de passer à des choses + complexes comme les expressions régulières, il faut absolument que j'ai de bonnes bases.

Hors ligne

#7 Le 07/12/2011, à 23:38

pingouinux

Re : [Résolu] Find-Omettre le dernier répertoire

Pour préciser un peu :
Le find va lister tous les répertoires de l'arborescence, qui sont transmis par le 1er pipe à la commande while. Cette dernière lit donc les répertoires un par un, et on en élimine l'élément final. Voici un exemple où on récupère des doublons :

/home/bidule/Document/repertoire1
/home/bidule/Document/repertoire2

Après élimination de la partie finale, on aura deux fois /home/bidule/Document

Hors ligne

#8 Le 08/12/2011, à 00:19

metalux

Re : [Résolu] Find-Omettre le dernier répertoire

Le find va lister

je n'avais pas complètement saisi comment fonctionnait Find même si mes quelques essais avais fonctionné l'ayant utilisé avec l'option -exec.
Le pipe s'explique donc si find liste.
Pour les doublons, idem. La page du man:

n'afficher que la première entrée identique rencontrée

me parait tellement évidente après l'exemple que tu as pris. Tout est clair maintenant.
Un exercice de résolu, je reviendrai certainement prendre conseils sur le forum au fur et à mesure de mes découvertes.
A propos, as-tu un lien ou il y aurait des exercices pour se familiariser avec bash (comme celui-ci par exemple bien que  je ne suis pas sûr que c'était adapté pour débuter).

Hors ligne

#9 Le 08/12/2011, à 09:42

backtolinux

Re : [Résolu] Find-Omettre le dernier répertoire


FW(2NICs) : Mandriva2010.2 x64 + 3DVB-S+Phoenix(039) (abonné C+, CSat, Freebox V6) + SSD 96Go + 2To SATA (0.5 + 1.5)
HPTC : Mandriva2010.2 x86 + 2DVB-S client du FW
HTPC-Client : Optiplex GX520+Mandriva2010.2 x86 + XBMC
2 stations XP-SP3

Hors ligne

#10 Le 11/12/2011, à 02:05

metalux

Re : [Résolu] Find-Omettre le dernier répertoire

Merci backtolinux.
y'a plus qu'à.....

Hors ligne

#11 Le 12/12/2011, à 04:20

backtolinux

Re : [Résolu] Find-Omettre le dernier répertoire

metalux a écrit :

Merci backtolinux.
y'a plus qu'à.....

Ça c'est du sens de l'à propos.

Tu reviendra partager tes découvertes et l'implémentation que tu en as faite : yOra pu Ka fournir le lien.


FW(2NICs) : Mandriva2010.2 x64 + 3DVB-S+Phoenix(039) (abonné C+, CSat, Freebox V6) + SSD 96Go + 2To SATA (0.5 + 1.5)
HPTC : Mandriva2010.2 x86 + 2DVB-S client du FW
HTPC-Client : Optiplex GX520+Mandriva2010.2 x86 + XBMC
2 stations XP-SP3

Hors ligne