Lijstbestanden met bepaalde extensies met LS en GREP

Ik wil gewoon de bestanden van de huidige dir en alleen uitvoeren .MP4 .mp3 .exe-bestanden niets anders.
Dus ik dacht dat ik dit gewoon kon doen:

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

Maar NEE, zoals de eerste grep uitvoert, wordt de andere 2 grep’s daarmee niet gebruikt.

alle ideeën? PS, het uitvoeren van dit script op langzaam luipaard.


1, Autoriteit 100%

Waarom niet:

ls *.{mp3,exe,mp4}

Ik weet niet zeker waar ik het heb geleerd – maar ik heb dit gebruikt.


2, Autoriteit 13%

egrep– Extended grep – helpt hier

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

zou de taak moeten doen.


3, Autoriteit 11%

Gebruik reguliere uitdrukkingen met find:

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

Als u de bestandsnamen pakt:

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

Dit beschermt bestandsnamen die spaties of newlines bevatten.

OS X findondersteunt alleen afwisseling wanneer de optie -E(verbeterde) wordt gebruikt.

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

4, Autoriteit 4%

De eenvoudigste manier is om alleen ls

te gebruiken

ls *.mp4 *.mp3 *.exe

5, Autoriteit 3%

Voor het geval dat: Waarom gebruikt u find?

find -iname '*.mp3' -o -iname '*.exe' -o -iname '*.mp4'

6, Autoriteit 2%

Geen behoefte aan grep. Shell-jokertekens zullen de truc doen.

ls *.mp4 *.mp3 *.exe

Als u

hebt uitgevoerd

shopt -s nullglob

Dan worden ongeëvenaarde globs helemaal verwijderd en niet op de opdrachtregel blijven.

Als u case-ongevoelige globbing wilt (dus * .mp3 komt overeen met foo.mp3):

shopt -s nocaseglob

7

Als u nog steeds op zoek bent naar een alternatieve oplossing:

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

Voel je vrij om meer vlaggen toe te voegen indien nodig.


8

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

9

ls -R | findstr ".mp3"

ls -R= & GT; somt subdirectories op


10

Het is eenvoudig om deze opdracht te gebruiken:

ls | grep \.txt$ && ls | grep \.exe

11

Hier is een voorbeeld dat voor mij heeft gewerkt.

find <mainfolder path> -name '*myfiles.java' | xargs -n 1 basename

Other episodes