Angenommen, ich habe ein Verzeichnis mit den Dateien a1, a2, a3, b1, b2, b3. Ich möchte nur Dateien finden, die anfangen, a
aber keine enthalten 3
. Ich habe es versucht, ls -I "*3" *a*
aber es kehrt zurück a1 a2 a3
, obwohl ich nicht möchte, dass es übereinstimmt a3
. Ist das möglich mit ls
?
12
do not list implied entries matching shell PATTERN
, aber es nicht erklären , was gemeint ist mit impliziert , aber ich vermute , es nur auf Dateien angewandt wird, diels
durch glob Erweiterungen bekommt - undls
nicht die nicht erweiterna*
, die Shell tut, .Antworten:
Gerade:
shopt -s extglob
Aktiviert erweitertes Globbing.a
passt zum Starta
!()
annulliert das Streichholz im()
...*3*
was ist3
und irgendetwas davor oder danach.quelle
set -s extglob
Bestehende Antworten geben den besten Weg an, dies mit Globs zu tun. Ich werde dies einschließen, da in den meisten Fällen
find
eine bessere Option ist, wenn Sie Skripte erstellen oder weiter verarbeiten möchten:Sie können die Antwort an
xargs
einfache Aktionen oder an einewhile read
Schleife für kompliziertere Dinge senden.quelle
Ein einfacher Weg ist
a*
3
Der UNIX-Befehl lautet
ls -1
zeigt eine Datei pro Zeile.grep
Normalerweise werden Linien gefunden, die mit einem Muster übereinstimmen, aber-v
dieses Verhalten ist invertiert.quelle
ls
ist keine gute Idee: mywiki.wooledge.org/ParsingLsMit
zsh
, unter Verwendung des~
Glob-Operators :Mit
gnu
ls
könnten Sie zwei--ignore
Möglichkeiten nutzen:Die erste ignoriert alle Dateinamen, die nicht mit "" beginnen,
a
und die zweite ignoriert Dateinamen, die "" enthalten3
quelle