IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes POSIX Discussion :

Problème avec "ls -R" => Liste fichier/dossier en récursif sur OS X avec le terminal


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut Problème avec "ls -R" => Liste fichier/dossier en récursif sur OS X avec le terminal
    Bonsoir,

    pour lister les fichiers/dossiers en récursif avec le terminal, j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -R 'le chemin voulu' >>Monfichier.txt
    1er problème
    il se peut que j'ai une application en ".app" dans un dossier qui n'est pas celui des applications;
    j'aimerai que celui-ci ne soit pas considéré comme un dossier à lister avec tout son contenu en récursif, mais qu'il soit lister comme un fichier du style monApplication.app comme pourrait l'être monImage.jpg

    2ème problème
    j'aimerai être sûr que le résultat soit en liste et non en colonne et si c'est possible avoir la possibilité d'avoir le chemin complet de chaque résultat comme "pwd" peut donner le chemin du "cd" mais, pour les fichiers

    Exemple actuellement:
    Chemin du dossier lsiter/…/Dossier toto:
    fichier_1.extension
    fichier_2.extension


    Ce que j'aimerai :
    Chemin du dossier lsiter/…/Dossier toto:
    Chemin du dossier lsiter/…/Dossier toto/fichier_1.extension
    Chemin du dossier lsiter/…/Dossier toto/fichier_2.extension
    Chemin du dossier lsiter/…/Dossier toto/…


    3ème et dernier problème
    je dois lister des images à mon travail qui sont sur un serveur non unix je pense (windows … ?? je m'y connais pas trop en serveur - je travail sur Mac),
    le problème est que certains chemins ou noms de fichiers ont des caractères accentués (oui je sais c'est mieux sans les accents, et je ne comprends pas qu'ils aient laissé faire … mais je ne peux rien changer et je dois faire avec),
    du coup dans mon fichier texte qui me récupère le résultat les caractères accentués sont remplacés par 2, 3 caractères ce qui fausse le résultat pour chaque chemins ou fichiers contenant ces caractères accentués
    Comment puis je faire pour obtenir directement le résultat avec les bons accents (je suppose que c'est une histoire d'encodage, mais jusqu'à présent j'ai fait chou blanc)

    Je vous remercie d'avance de l'aide que vous pourrez m'apporter

    Ryu
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    jusqu'à « sur un serveur non unix », c'est facilement faisable avec find, après je ne sais pas.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    - 1er problème

    Il manque des infos pour que ce soit clair.

    - 2ème problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $(find chemin -type f)
    - 3ème et dernier problème

    Il faudrait que tu donnes des exemples concrets de noms de fichiers à problème.

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    Merci N_BaH de ton 1er retour. J'essaie de voir les différentes alternatives. Je suis parti sur ls au départ car il me semble que c'est le plus rapide (à moins que je me trompe); il y a aussi locate sur sa propre machine, mais il faut faire le nécessaire pour le rendre actif.
    Je pensais au départ que l'on pouvait coupler ls -R avec une combinaison supplémentaire via le signe | et autre chose …

    jlliagre merci ton retour.
    Pour la partie 1, dis moi quels types de précisions as tu besoins ?
    Ce que je peux rajouter de plus, c'est qu'il 'm'arrive de tester une application que je ne mets pas dans le dossier "Applications" mais que j'ai pu installer par glissage sur le bureau ou dans téléchargement par exemple.
    Les applications sur OS X sont en ".app", et ressemble à des packages, c'est à dire, quand on voit une application dans le finder elle à l'air physiquement comme un fichier (sauf que c'est une application), mais lorsque l'on fait un clic droit sur ladite application, on peut l'ouvrir comme un dossier et voir tous les éléments constituant cette application (fichiers, sous-dossiers, …)

    un exemple représentatif de ce que l'on peut voir avec une application :

    Nom : 0001.png
Affichages : 1702
Taille : 17,5 Ko

    puis quand on l'ouvre avec "Afficher le contenu du paquet" :

    Nom : 0002.png
Affichages : 1779
Taille : 26,5 Ko

    et donc ce contenu est listé, alors que moi je ne veux que l'application au listage (Adobe Photoshop CS6) et non son contenu

    Pour le 2è point je crois que je me suis mal exprimé car quand je parler en "liste" j'avais à l'esprit avoir chaque résultat à la ligne comme montré sur le poste #1 (donc en fait ça ne doit pas être liste ou colonne)
    (toujours en récursif)

    Pour le 3è point, je vais donner des exemples de ce que je peux avoir en résultat :
    dans les noms de dossiers :
    PDT00575_Feuillard polypropyleÃÄne en boiÃÇte distributrice eÃÅconomique
    PDT00737_Essuie-mains pliage encheveÃÇtreÃÅ Tork
    PDT00789_Serviette blanche aÃÄ pliage deÃÅcaleÃÅ


    dans les fichiers
    BoiÃÇte viennoiserie.jpg
    et ainsi de suite

    c'est le même problème de reconnaissance de caractères, que ça soit dans les chemins, noms de dossiers ou noms de fichier

    merci pour votre retour

    Ryu

    Edit : Précisions supp. sur le point 3, en refaisant un test avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -R 'le chemin voulu'
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -R 'le chemin voulu' >>Monfichier.txt
    les caractères accentués apparaissent correctement dans le terminal, ce qui veut dire que le problème provient lorsque je fais la même ligne de commande mais enregistré dans un fichier texte en plus.
    Donc comment enregistré correctement le résultat dans un fichier texte avec le bon encodage pour ne plus avoir se problème ?
    - j'ai remarqué une chose supplémentaire, la command ls -R liste tous les dossiers comme ceci :

    PDT00002_lames pour cutter Olfa-v1
    PDT00003_Coupe-film Opticut


    puis je les retrouve beaucoup plus bas avec le chemin et le contenu comme ceci :

    /Volumes/Perigee_RJPF/Bureau/Publishing/Base Images/Images Produits/PDT00002_lames pour cutter Olfa-v1:
    6211
    6211S

    /Volumes/Perigee_RJPF/Bureau/Publishing/Base Images/Images Produits/PDT00002_lames pour cutter Olfa-v1/06211:

    /Volumes/Perigee_RJPF/Bureau/Publishing/Base Images/Images Produits/PDT00002_lames pour cutter Olfa-v1/6211S:
    6211S_S_FR.eps

    /Volumes/Perigee_RJPF/Bureau/Publishing/Base Images/Images Produits/PDT00003_Coupe-film Opticut:
    436

    /Volumes/Perigee_RJPF/Bureau/Publishing/Base Images/Images Produits/PDT00003_Coupe-film Opticut/436:
    436_A1_FR.eps
    436_A_FR.eps
    436_S_FR.eps


    Comment puis je faire pour éviter cette répétition sachant que je n'ai que besoin de des chemins des dossiers et les fichiers contenus dans ceux-ci (dossiers vides compris) comme cela :

    /Volumes/Perigee_RJPF/Bureau/Publishing/Base Images/Images Produits/PDT00003_Coupe-film Opticut/436:
    436_A1_FR.eps
    436_A_FR.eps
    436_S_FR.eps
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par RyuAutodidacte Voir le message
    Edit : Précisions supp. sur le point 3, en refaisant un test avec ls -R 'le chemin voulu' au lieu de ls -R 'le chemin voulu' >>Monfichier.txt les caractères accentués apparaissent correctement dans le terminal, ce qui veut dire que le problème provient lorsque je fais la même ligne de commande mais enregistré dans un fichier texte en plus.
    Pourrais-tu donner le résultat de ces commandes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ls -R 'le chemin voulu' | egrep '^PDT00789_Serviette blanche' | od -c
    ls -R 'le chemin voulu' | egrep '^PDT00789_Serviette blanche' > /tmp/foo.txt
    file /tmp/foo.txt
    od -c /tmp/foo.txt

    Comment puis je faire pour éviter cette répétition sachant que je n'ai que besoin de des chemins des dossiers et les fichiers contenus dans ceux-ci (dossiers vides compris) comme cela :
    Pas très clair pour moi...

    Veux-tu dire que si un répertoire ne contient que des sous-répertoires et aucun fichier direct, tu ne veux pas voir le contenu du répertoire (c'est-à-dire la liste des sous-répertoires), mais que tu veux le contenu des sous-répertoires (sous réserve qu'ils contiennent des fichiers)?

  6. #6
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Essaie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (printf '\xEF\xBB\xBF'; find "chemin voulu" -name "*.app" -print -prune -o -print ) > fichier.txt
    Le printf ajoute un indicateur d'encodage UTF-8 au fichier résultat.

    Le find ne descend pas dans les répertoires *.app

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    - 1er problème

    Il manque des infos pour que ce soit clair.
    Sous macos, les applications sont des vrais répertoires (avec des droits étendus, repérables par le caractère "@"):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $ ls -ldF Godot.app
    drwxr-xr-x@ 3 jack  staff  102 10 aoû  2016 Godot.app/
     
    $ ls -lRF Godot.app
    total 0
    drwxr-xr-x@ 6 jack  staff  204 10 aoû  2016 Contents/
     
    Godot.app/Contents:
    total 16
    -rwxr-xr-x@ 1 jack  staff  1868 10 aoû  2016 Info.plist*
    drwxr-xr-x@ 3 jack  staff   102 10 aoû  2016 MacOS/
    -rw-r--r--@ 1 jack  staff     9 10 aoû  2016 PkgInfo
    drwxr-xr-x@ 3 jack  staff   102 10 aoû  2016 Resources/
     
    Godot.app/Contents/MacOS:
    total 187888
    -rwxr-xr-x@ 1 jack  staff  96195572 10 aoû  2016 Godot*
     
    Godot.app/Contents/Resources:
    total 240
    -rw-r--r--@ 1 jack  staff  120942 10 aoû  2016 Godot.icns
    Là, j'ai choisi une toute petite application, mais certaines peuvent contenir bôôôôôôcoup de sous-répertoires et fichiers (Xcode en contient 686382).

    Si j'ai bien compris, l'utilisateur veut parcourir récursivement un répertoire, mais pas les sous-répertoires qui sont des applications.

    Je ne connais pas suffisamment "find" pour lui dire de:
    - parcourir récursivement un répertoire
    - pour un sous-répertoire de nom "*.app", l'afficher avec son chemin absolu et stopper la récursion
    - pour tout autre fichier, l'afficher avec son chemin absolu

    Si je devais vraiment le faire tout seul, avec mes maigres connaissances de "find", je ferais une 1ère passe pour afficher uniquement tous les "*.app" et une 2ème passe avec un exclude sur "*.app"...

  8. #8
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    bonsoir jack-ft,

    oui en effet c'est logique, par contre je ne sais pas si il faut stopper la récusion, j'ai l'impression que ça risque de fausser le résultat.
    Par contre sans coder, si on réfléchi avec logique maintenant que tu soulèves le sujet, peut être qu'il faudrait qq ch de la sorte :
    - on envoi le listage en récursion, si on tombe sur "*.app" on le force à passer au prochain fichier ou dossier, mais comment faire …

    je continue mes recherches un peu à droite à gauche afin de voir les différents codes

    Merci pour tes idées, n'ésites pas à repasser si tu as des infos supp.

    PS : je suis tombé sur ce code qui ne résout pas mon pb de ".app" mais qui donne le chemin complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     ls -R /path | awk '
    /:$/&&f{s=$0;f=0}
    /:$/&&!f{sub(/:$/,"");s=$0;f=1;next}
    NF&&f{ print s"/"$0 }'
    Ryu

    Edit : Y a t-il moyen d'utiliser -maxdepth 0 pour les "*.app*" ??
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  9. #9
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 361
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 361
    Par défaut
    Bonjour,

    J'ai pas de OS x sous la main, mais en regardant le man du find, j'ai vu qu'il existait des commandes du genre mdfind qui pourraient répondre au moins à la première question.
    Pour la deuxiéme, au pire, find peut faire l'affaire.
    Pour la troisième, je pense que l'enregistrement dans le fichier est correct, c'est juste un problème d'affichage. Si les fichiers sont sur du ntfs, il y a de forte chance que cela soit de l'utf8, d'ailleurs, comment accèdes-tu à ces fichiers ? c'est un point de montage ? si oui, regarde les options de montage, tu auras peut-être l'indication de la locale utilisée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/11/2014, 15h18
  2. Réponses: 1
    Dernier message: 14/10/2011, 15h33
  3. Problème avec FTP et liste de fichiers
    Par Xphil dans le forum Langage
    Réponses: 14
    Dernier message: 14/04/2010, 18h31
  4. FTP Problème avec commons net récuperation de la liste fichier
    Par reverse_engineer dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 05/08/2008, 15h58
  5. liste fichiers (TListView) avec icones
    Par pjb dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/07/2005, 09h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo