web-dev-qa-db-fra.com

Liste les fichiers avec certaines extensions avec ls et grep

Je veux juste obtenir les fichiers du répertoire en cours et ne générer que les fichiers .mp4, .mp3 et autres .exe. Alors j'ai pensé que je pouvais faire ça:

ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$

Mais non, comme le premier grep ne produira que les fichiers mp4, les 2 autres grep ne seront pas utilisés.

Des idées? PS, Exécution de ce script sur Slow Leopard.

133
Mint

Pourquoi pas:

ls *.{mp3,exe,mp4}

Je ne sais pas où je l'ai appris - mais je l'utilise.

308
meder omuraliev

Utilisez des expressions régulières avec find:

find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\n'

Si vous pipez les noms de fichiers:

find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\0' | xargs -0 dosomething

Cela protège les noms de fichiers contenant des espaces ou des nouvelles lignes.

OS X find ne prend en charge l'alternance que lorsque l'option -E (amélioré) est utilisée.

find -E . -regex '.*\.(mp3|mp4|exe)'
43
Dennis Williamson

egrep - grep étendu - aidera ici

ls | egrep '\.mp4$|\.mp3$|\.exe$'

devrait faire le travail.

34
mob

le plus simple est d'utiliser simplement ls

ls *.mp4 *.mp3 *.exe
11
Joshua K

Juste au cas où: pourquoi n'utilisez-vous pas find?

find -iname '*.mp3' -o -iname '*.exe' -o -iname '*.mp4'
8
P Shved

Pas besoin de grep. Shell wildcards fera l'affaire.

ls *.mp4 *.mp3 *.exe

Si vous avez couru

shopt -s nullglob

alors les globs sans correspondance seront complètement supprimés et ne seront pas laissés sur la ligne de commande non expansés.

Si vous souhaitez que la globbing ne respecte pas la casse (donc * .mp3 correspond à foo.MP3):

shopt -s nocaseglob
5
camh

Si vous recherchez toujours une solution alternative:

ls | grep -i -e '\\.tcl$' -e '\\.exe$' -e '\\.mp4$'

N'hésitez pas à ajouter plus de drapeaux -e si nécessaire.

4
Hai Vu

Pour les utilisateurs OSX:

Si vous utilisez ls *.{mp3,exe,mp4}, , une erreur sera générée si l'une de ces extensions n'a aucun résultat.

L'utilisation de ls *.(mp3|exe|mp4) renvoie tous les fichiers correspondant à ces extensions , même si l'une des extensions avait 0 résultat .

4
james2doyle
ls | grep "\.mp4$
\.mp3$
\.exe$"
2
Jeff Mc

ls -R | findstr ".mp3"

ls -R => liste les sous-répertoires de manière récursive

2
vardamanpk

Voici un exemple qui a fonctionné pour moi.

find <mainfolder path> -name '*myfiles.Java' | xargs -n 1 basename
0
Jyoti Prakash