• # -and -not -name .\*

    Posté par . Évalué à 3.

    Comme les fichiers cachés sous unix ont simplement le nom qui commence par un point, il suffit de les exclure sur cette base.
    • [^] # Re: -and -not -name .\*

      Posté par . Évalué à 2.

      ca n'a pas l'air de fonctionner , il me donne tout de meme les fichiers caché . La commande utilisé :

      find ~ -type f -name "*s" -and -not -name .\*
      • [^] # Re: -and -not -name .\*

        Posté par . Évalué à 3.

        En effet, j'avais mal lu ton message, tu veux ignorer les répertoires cachés. Dans ce cas il faut plutôt prendre le critère -path qui va comparer au chemin complet du fichier.
        Ça donne

        find ~ -type f -name "*s" -and -not -path \*/.\*
        • [^] # Re: -and -not -name .\*

          Posté par . Évalué à 2.

          Merci !! ca marche

          Au fait pourrais-tu m'expliquer l'expression régulière derrière le path ?
          • [^] # Re: -and -not -name .\*

            Posté par . Évalué à 4.

            Ce n'est pas une expression rationnelle (et pas régulière qui est une traduction trop litérale de l'anglais) c'est un shell pattern, les back-slash sont juste là pou empêcher le shell de l'interpréter lui-même. Ça laisse donc
            */.*
            qui va être comparé au chemin complet du fichier (-path), comme le slash est le séparateur de noms de fichiers ça signifie tout fichier dont le nom commence par un point.

            Note que la proposition de benoar est effectivement plus efficace puisqu'elle ignore complètement les répertoires en question (mais prendra les fichiers cachés, si ce n'est pas ce que tu veux il faut retirer le -type d)
        • [^] # Re: -and -not -name .\*

          Posté par . Évalué à 3.

          Je conseillerai plutôt un :
          find ~ -type d -name .\* -prune -or -type f -name "*s" -print
          qui n'ira même pas parcourir les répertoires cachés, contrairement à ta commande.
      • [^] # Re: -and -not -name .\*

        Posté par . Évalué à 0.

        C'est mieux si tu ajoutes « bonjour » et « merci » dans des interventions, également.
  • # Pas très intuitif :-)

    Posté par (page perso) . Évalué à 1.

    find ~ -type f -name 'xxxxx' -and -not -regex '.*/\..*/..*'
    find ~ \( ! -regex '.*/\..*/..*' \) -type f -name 'xxxxx'
    • [^] # Re: Pas très intuitif :-)

      Posté par . Évalué à 2.

      je me rend comptee que cet expression est assez eleguante en effet ,juste que je ne comprend pas toute la syntax de la regex

      pourrais tu m' eclairer
      • [^] # Re: Pas très intuitif :-)

        Posté par (page perso) . Évalué à 4.

        A noter que la syntaxe citée plus haut avec -prune est probablement bien meilleure dans ce cas précis: les répertoires ignorés ne sont pas parcourus, alors qu'avec ma proposition, ils le sont (bien que leur contenu soit totalement ignoré).

        '.*/\..*/..*'
        guillemets simples: pour que le shell n'évalue rien à l'intérieur.
        On recherche un motif contenant xxxxx/.xxxxx/xxxxx (chaque xxxx étant n'importe quel caractère, y compris aucun caractère). En gros, c'est un nom de répertoire commençant par un point. Un nom de répertoire est toujours encadré par des slashes.
        Dans une expression régulière, au lieu d'écrire xxxxx, on écrit .* ce qui indique "n'importe quel caractère (le point), n'importe quel nombre de fois (l'étoile), y compris zéro fois".
        Pour indiquer qu'on recherche le caractère 'point', il faut l'échapper car il a une signification particulière. Donc \. pour rechercher un point.

        L'expression pourrait être améliorée par '.*/\..*/.*' car sinon on indique qu'on élimine les noms de répertoires suivis d'un nom de fichier contenant au moins un caractère, ce qui est forcément le cas. '..*' indique "n'importe quel caractère (le point) suivi de n'importe quel caractère (le second point) zéro ou x fois (l'étoile). C'est la même chose que '.+' qui indique "n'importe quel caractère, au moins une fois". Mais là, pas besoin de préciser qu'il faut au moins un caractère.

        J'espère que c'est clair :-)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.