Angenommen, ich habe die folgenden Dateien in meinem Arbeitsverzeichnis: mjk0001.fits, mjk0002.fits, ... numerisch bis mjk9999.fits.
Gibt es eine Möglichkeit, UNIX-Platzhalter zum Auflisten oder Bearbeiten einer sequenziellen Gruppe von UNIX-Platzhaltern zu verwenden? Welches Format würde ich beispielsweise verwenden, wenn ich einen Prozess zwischen 0025 und 0050 ausführen muss?
Ich habe Folgendes versucht, aber keinen Erfolg gehabt:
ls *[25-50].fits
ls mjk00[25-50].fits
ls mjk[0025-0050]*
ls *[0025-0050]*
Vielen Dank im Voraus an alle, MK
bash
unix
command-line
ls
Matt Keene
quelle
quelle
Antworten:
Sie können die Klammererweiterung verwenden:
Bei Bedarf können führende Nullen eingefügt werden:
quelle
{25..50..2}
.Nicht direkt, aber Sie können mehrere Glob-Muster verwenden:
Es ist nicht genau das, wonach Sie suchen, aber es ist das Nächste, was Glob-Muster bieten, und es ist sicherlich besser, als jedes Dateisystem zu tippen. Mindestens die Anzahl der Muster, die Sie pro Zahlenbereich benötigen, wird durch das Protokoll der numerischen Endpunkte des Bereichs begrenzt.
quelle
Sie könnten einen regulären Ausdruck mit grep verwenden. Ich bin kein Regex-Guru. Folgendes gibt das Muster mit den Zahlen zwischen 25 und 50 zurück:
Ich weiß nicht, ob es möglich ist und wie man das eventuell mit grep verallgemeinern kann.
quelle
Möglicherweise können Sie eine größere Portabilität oder Flexibilität erzielen, indem Sie eine
for
Schleife verwenden undprintf
:Dies handhabt Räume gut und die Ergebnisse sind gut geeignet, um
xargs
zur weiteren Verarbeitung weitergeleitet zu werden.Zahlen mit mehreren Übereinstimmungen führen dazu, dass alle übereinstimmenden Dateien aufgelistet werden.
Zahlen ohne Übereinstimmungen melden einen Fehler bei stderr,
||true
unterdrücken jedoch eine Fehlerrückgabe auf Bash-Ebene.Im Grundfall unterscheidet sich die Verwendung von
for
undprintf
jedoch nicht von der prägnanteren:quelle
for i in {025..050} ; do ... ; done