
Ich möchte die Dateien durchsuchen, deren Dateinamen die Teilzeichenfolge „s1r“, „s2r“, „s3r“ oder „s19r“ enthalten.
Ich bin fast da!
Misslungene Versuche:
ls *s[123][9?]r*
Das Obige gibt mir nur Dateien, die den Teilstring enthalten
s19r
Während
ls *s[1-3]|[19]r*
kehrt zurück
-bash: [19]r*: Befehl nicht gefunden
ls: *s[1-3]: Keine solche Datei oder kein solches Verzeichnis
Das heißt, der Operator „oder |“ wird nicht erkannt. Dies ist sinnvoll, da dieser auch zum Weiterleiten verwendet wird.
Wie suche ich nach Dateien, die „s1r“, „s2r“, „s3r“ oder „s19r“ enthalten?
Antwort1
Verwenden ls *s1r* *s2r* *s3r* *s19r*
.
Wenn Sie nicht vorhandene Dateien berücksichtigen möchten, können Sie die Option „Nullglob“ festlegen:
nullglob
If set, bash allows patterns which match no files (see
Pathname Expansion above) to expand to a null string,
rather than themselves.
Wenn Ihre Shell nicht Bash ist, gibt es wahrscheinlich einen ähnlichen Weg. Sehen Sie sich die Manpage dazu an.
Antwort2
Sie können Folgendes versuchen:
ls *s?([123])r* *s19r*
Zum Beispiel
Ich habe ein Verzeichnis mit folgenden Dateien:
% ls | column
s10r s12r s14r s16r s18r s1r s2r s4r s6r s8r
s11r s13r s15r s17r s19r s23r s3r s5r s7r s9r
Unter Verwendung des oben genannten ls:
% ls *s?([123])r* *s19r*
s19r s1r s2r s3r
Sehen Sie sich dieBash-Handbuch zur Musterübereinstimmungfür mehr Details.