Globbing avec ls pour trouver tous les fichiers correspondant à un certain motif
Je suis en train d'essayer de localiser tous les fichiers PDF dans un dossier et un sous-dossier, dans le terminal, plutôt que dans un script. Je suis aussi tout à fait nouveau pour linux, donc m'excuser si j'ai oublié quelque chose d'évident, ou peut-être vital pour diagnostiquer mon problème particulier.
Je suis en utilisant bash 4.1.5(1)-release (i486-pc-linux-gnu), et fait quelques piquer sur sur google à propos de glob et extglob expressions, et il semble que la syntaxe que je devrais utiliser est
$ ls **.pdf
Ceci, cependant, ne trouve rien, puisqu'il n'existe pas de fichier correspondant au modèle *.pdf
dans le dossier en cours ./
; il semble vouloir lire **
comme *
:
ls: cannot access **.pdf: No such file or directory
Il y a des fichiers Pdf ailleurs, dans les sous-dossiers entre 1 et 5 de profondeur (en particulier dans chaque sous-dossier 1-profond), dont certaines que je peut voir en vérifiant avec
$ ls */*.pdf
Donc, ls
semble fonctionner correctement. Le manuel semble ne pas être très utile, étant donné que tout ce que je pouvais voir qui pourrait être de n'importe quel usage nous en appelant ls
avec le -R
drapeau, ce qui ne permet pas de résoudre le problème dans l'un des cas ci-dessus.
J'ai essayé d'utiliser extglob modèles (en prenant soin de les tourner avec shopt
). Je peux voir ma profondeur-1 les fichiers avec ls */*?(.)pdf
mais je ne peux pas voir quoi que ce soit avec ls .*(/*)pdf
ou ls .*(/*).pdf
même à partir d'un sous-répertoire où sont les fichiers Pdf.
J'ai lu ailleurs (en référence à la .gitignore
fichier dans un dépôt git) que le **
modèle ne fonctionne pas pour tout le monde.
- Ce que cela pourrait être un effet sur moi, et comment pourrais-je y remédier (idéalement sans privilèges de super-utilisateur)? Cela pourrait-il (ou quelques problème) être aussi une incidence sur le extglob fonctionnalité?
source d'informationauteur Nick Loughlin
Vous devez vous connecter pour publier un commentaire.
Vous pourriez envisager de trouver
ou
où . est votre répertoire de travail courant. Le glob fonctionnalité est livré avec 4.0+ bash. Le glob extensions ne sont pas transférables dans d'autres mots.
Les options
extglob
etglobstar
sont nécessaires pour obtenir les fonctionnalités étendues de laglob
de la bibliothèque; ils sont activés à l'aide du shell options (shopt
) utilitaire tel que décrit ci-dessous.D'utiliser le
globstar
(ce qui provoque la**
motif à se comporter comme décrit dans le manuel de bash), il faut l'activer (en bash 4.0+) avecet pour permettre au plus "fonctionnelle" regex-type des expressions comme
?(ab)
et*(ab)
leur plein effet, l'utilisationPour activer les options d'envoi à nouveau, spécifiez le
-u
drapeau au lieu des
pour eaxample