Je suis en train de ls
dirs qui ont des .png
fichiers à l' intérieur (pas besoin de récursivité, mais il serait utile supplémentaire), d' une exepté. Exclure un répertoire, c.-à-d.
ls */*.png
fonctionne bien.
ls (^one)*/*.png
ne renvoie aucune sortie standard. Comment y parvenir?
Je suis aveugle et je le passe espeak
, donc je ne peux entendre que la sortie pour l'instant.
one
(le bon motif serait^one/*.png
), il imprimerait tout.Réponses:
Option 1 - en utilisant simplement
ls
:Avec le globbing bash étendu activé (
shopt -s extglob
), vous pouvez faire:Option 2 - combiner
ls
etgrep
:Vous pouvez combiner
ls
avecgrep -v
ls */*.png | grep -v "one/"
Option 3 - (le meilleur IMO) mais n'utilise
find
pasls
:Pour une recherche récursive de tous les sous-répertoires à l'aide de
find
Tous les monolignes ci-dessus répertorieront les répertoires avec des
.png
fichiers tout en filtrant tout chemin correspondantone/
; seule l'option 3 le fera récursivement.la source
find
commande n'a- t-elle pas besoin de dire-path "*/one/*"
ou-path "./one/*"
?./phone/handset.png
?.png
s dans un répertoire appeléphone
? Je pensais que nous essayions juste d'exclureone
?-not
, cela signifie qu'il entraîne l'find
exclusion des fichiers dans un répertoire appeléphone
.En zsh , mettez
setopt extended_glob
votre~/.zshrc
. Ensuite, vous pouvez utiliser le modèle générique^one
pour exclure le répertoire appeléone
.Si vous voulez
**/
récursivement dans des sous-répertoires, utilisez pour la globalisation récursive. Pour exclure le répertoire appeléone
au niveau supérieur, ainsi que le répertoire de niveau supérieur:Pour exclure des fichiers d'un sous-répertoire appelé
one
, mais pas des fichiers de ses sous-répertoires:Pour exclure des fichiers d'un sous-répertoire appelé
one
à n'importe quel niveau, utilisez un motif de répétition avec l'#
opérateur autour de la négation:la source