Ls récursif avec conditions

16

Pourquoi ne puis-je pas utiliser une commande comme celle-ci pour trouver tous les fichiers PDF dans un répertoire et des sous-répertoires? Comment fait-on ça? (J'utilise bash dans ubuntu)

ls -R *.pdf

ÉDITER

Comment pourrais-je alors supprimer tous ces fichiers?

Tomba
la source

Réponses:

22

Pourquoi ne puis-je pas utiliser une commande comme celle-ci pour trouver tous les fichiers PDF dans un répertoire et des sous-répertoires?

Le caractère générique *.pdfde votre commande est étendu par bashtous les fichiers correspondants dans le répertoire actuel, avant de s'exécuter ls.


Comment fait-on ça? (J'utilise bash dans ubuntu)

trouver est votre réponse.

find . -name \*.pdf

est une liste récursive des fichiers pdf. -inameest une correspondance insensible à la casse, donc

find . -iname \*.pdf

liste tous les fichiers .pdf, y compris par exemple foo.PDF

Vous pouvez également utiliser ls pour un nombre limité de sous-dossiers, par exemple

ls *.pdf */*.pdf

pour trouver tous les fichiers pdf dans les sous-dossiers (correspond à bar / foo.pdf, pas à bar / foo / asdf.pdf et pas à foo.PDF).

Si vous souhaitez supprimer les fichiers trouvés avec find, vous pouvez utiliser

find . -iname \*.pdf -delete
Olli
la source
1
Juste au cas où vous voudriez une sortie similaire à la ls -lcommande, montrant la taille du fichier, la propriété, la date, etc., vous pouvez l'utiliser findavec l' -lsoption, par exemplefind . -name \*.pdf -ls
RFVoltolini
2

Comme d'autres l'ont dit, trouver est la réponse.

Maintenant, pour répondre à l'autre partie.

  • Comment pourrais-je alors supprimer tous ces fichiers?

    trouver . -iname * .pdf -exec rm {} \;

Devrait le faire.

Matt H
la source
2
Vous devez citer votre glob pour l'empêcher d'être prématurément développé.
pause jusqu'à nouvel ordre.
1

Utilisez find au lieu de ls

find . -name '*.pdf'
vartec
la source