Je veux juste obtenir les fichiers du répertoire actuel et ne sortir que les fichiers .mp4 .mp3 .exe rien d'autre. Alors j'ai pensé que je pouvais simplement faire ceci:
ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$
Mais non, comme le premier grep ne sortira que des mp4, les 2 autres grep ne seront pas utilisés.
Des idées? PS, Exécution de ce script sur Slow Leopard.
shopt -s nullglob
, puis faites simplement référence à*.exe *.mp3 *.mp4
. Voir mywiki.wooledge.org/ParsingLsRéponses:
Pourquoi pas:
Je ne sais pas où je l'ai appris - mais je l'utilise.
la source
ls: *.exe: No such file or directory
par exemple:ls *.{zip,tar.gz,tar} 2>/dev/null
Utilisez des expressions régulières avec
find
:Si vous transmettez les noms de fichiers:
Cela protège les noms de fichiers contenant des espaces ou des retours à la ligne.
OS X
find
ne prend en charge l'alternance que lorsque l'-E
option (améliorée) est utilisée.la source
find . -iregex '.*\(mp3\|mp4\|exe\)'
mysupermp3.jpg
pensez à ajouter le$
à la fin de l'expression régulière et le\\.
avant les extensionsegrep
- grep étendu - aidera icidevrait faire le travail.
la source
ls
vers un terminal (ou avec-C
option) produit une sortie multi-colonnes.ls
vers un tube (ou avec-1
) a une sortie de colonne unique. (Comparez la sortie dels
avecls | cat
).le moyen le plus simple est d'utiliser simplement ls
la source
ls
n'y ait pas d'option silencieuse.Juste au cas où: pourquoi ne pas utiliser
find
?la source
find . -name '*.mkv' -o -name '*.flv'
(en ajoutant autant de clauses -o que nécessaire). Je avais besoin.
pour indiquer le répertoire et le drapeau-name
pas-iname
- je suis sur macOS 10,13.Pas besoin de grep. Les jokers Shell feront l'affaire.
Si vous avez couru
alors les globes sans correspondance seront complètement supprimés et ne seront pas laissés sur la ligne de commande sans développement.
Si vous voulez un globbing insensible à la casse (donc * .mp3 correspondra à foo.MP3):
la source
-R
option de lister les fichiers correspondants dans les sous-répertoires mais l'option ne semble pas avoir d'effet et je n'obtiens toujours que les résultats du répertoire actuel.Dans le cas où vous êtes toujours à la recherche d'une solution alternative:
N'hésitez pas à ajouter d'autres indicateurs -e si nécessaire.
la source
Pour les utilisateurs OSX :
Si vous utilisez
ls *.{mp3,exe,mp4}
, cela générera une erreur si l'une de ces extensions n'a pas de résultats.L'utilisation
ls *.(mp3|exe|mp4)
retournera tous les fichiers correspondant à ces extensions, même si l'une des extensions n'a donné aucun résultat .la source
ls *.@(mp3|exe|mp4)
. Vous en avez besoinshopt -s extglob
pour que cela fonctionne. En passant,ls
est inutile aussi, vous pouvez le faireprintf '%s\n' *.@(mp3|exe|mp4)
.la source
mdfind
produit les recherches les meilleures / les plus rapides JAMAIS!mdfind -name querystring | grep "\.h$"
trouve tous les en-têtes avec quesrystring dans le titre du fichier. pronto.ls -R | findstr ".mp3"
ls -R
=> liste les sous-répertoires de manière récursivela source
Voici un exemple qui a fonctionné pour moi.
la source