Ich möchte nur die Dateien aus dem aktuellen Verzeichnis abrufen und nur .mp4 .mp3 .exe-Dateien ausgeben, sonst nichts. Also dachte ich, ich könnte das einfach machen:
ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$
Aber nein, da der erste grep nur mp4s ausgibt, werden die anderen 2 grep's nicht verwendet.
Irgendwelche Ideen? PS: Führen Sie dieses Skript auf Slow Leopard aus.
shopt -s nullglob
und verweisen Sie dann einfach auf*.exe *.mp3 *.mp4
. Siehe mywiki.wooledge.org/ParsingLsAntworten:
Warum nicht:
Ich bin mir nicht sicher, wo ich es gelernt habe - aber ich habe es benutzt.
quelle
ls: *.exe: No such file or directory
zB Folgendes zu vermeiden :ls *.{zip,tar.gz,tar} 2>/dev/null
Verwenden Sie reguläre Ausdrücke mit
find
:Wenn Sie die Dateinamen weiterleiten:
Dies schützt Dateinamen, die Leerzeichen oder Zeilenumbrüche enthalten.
OS X
find
unterstützt den Wechsel nur, wenn die-E
(erweiterte) Option verwendet wird.quelle
find . -iregex '.*\(mp3\|mp4\|exe\)'
mysupermp3.jpg
$
\\.
egrep
- Extended Grep - wird hier helfensollte den Job machen.
quelle
ls
an ein Terminal (oder mit-C
Option) erzeugt eine mehrspaltige Ausgabe.ls
zu einem Rohr (oder mit-1
) hat eine einspaltige Ausgabe. (Ausgabe vonls
mit vergleichenls | cat
).Am einfachsten ist es, nur ls zu verwenden
quelle
ls
es keine stille Option gibt.Nur für den Fall: Warum benutzt du nicht
find
?quelle
find . -name '*.mkv' -o -name '*.flv'
(Hinzufügen von so vielen -o-Klauseln wie erforderlich). Ich brauchte das.
, um das Verzeichnis und das Flag-name
nicht anzugeben-iname
- ich bin auf macOS 10.13.Keine Notwendigkeit für grep. Shell-Platzhalter reichen aus.
Wenn du gelaufen bist
dann werden nicht übereinstimmende Globs vollständig entfernt und nicht in der Befehlszeile nicht erweitert.
Wenn Sie ein Globbing ohne Berücksichtigung der Groß- und Kleinschreibung wünschen (daher entspricht * .mp3 foo.MP3):
quelle
-R
Option zu verwenden, um übereinstimmende Dateien in Unterverzeichnissen aufzulisten, aber die Option scheint keine Auswirkung zu haben und ich erhalte immer noch nur die Ergebnisse des aktuellen Verzeichnisses.Falls Sie noch nach einer alternativen Lösung suchen:
Fühlen Sie sich frei, bei Bedarf weitere -e-Flags hinzuzufügen.
quelle
Für OSX-Benutzer :
Wenn Sie verwenden
ls *.{mp3,exe,mp4}
, wird ein Fehler ausgegeben, wenn eine dieser Erweiterungen keine Ergebnisse liefert.Mit using
ls *.(mp3|exe|mp4)
werden alle Dateien zurückgegeben, die diesen Erweiterungen entsprechen, auch wenn eine der Erweiterungen 0 Ergebnisse hatte .quelle
ls *.@(mp3|exe|mp4)
. Sie müssenshopt -s extglob
damit funktionieren. Ist übrigens auchls
nutzlos, könnte man einfach machenprintf '%s\n' *.@(mp3|exe|mp4)
.quelle
mdfind
liefert die besten / schnellsten Suchanfragen aller Zeiten!mdfind -name querystring | grep "\.h$"
findet alle Header mit Quesrystring im Dateititel. pronto.ls -R | findstr ".mp3"
ls -R
=> listet Unterverzeichnisse rekursiv aufquelle
Hier ist ein Beispiel, das für mich funktioniert hat.
quelle