Ich bin nicht so erfahren mit bash und ich habe eine Frage.
Ich versuche einige Dateien auszuwählen (sagen wir ls für dieses Beispiel), die nicht mit einem bestimmten Array von Mustern übereinstimmen.
Ich habe Dateien namens Test, Test1, Test2, Test3, Test4, Test5, Test6, Test7, Test8, Test9, Test10, die ich in zwei Gruppen auswählen muss.
Die erste Gruppe ist Test5, Test6, Test7, Test8, Test9, Test10, die ich auflisten kann mit:
%Vor%Die zweite Gruppe ist die knifflige (wegen mir) wegen der Test & amp; Test1-Dateien. Ich versuche die vorherige Auswahl / Liste zu invertieren .. oder wähle irgendwie den Rest aus. Ich habe mehrere Dinge ohne Glück versucht:
%Vor%ps: Die tatsächlichen Dateinamen haben zusätzliche Zeichen nach der Nummer.
Sie können eine leere Zeichenfolge als eine Option in der Liste verwenden:
%Vor%[EDIT] Aber im Allgemeinen sehe ich keine Möglichkeit inverted match in bash alleine zu machen. Ich sehe jetzt auch, dass es nach Zahlen weitere Zeichen geben kann (ich nehme an, dass sie nicht numerisch sind, oder Sie hätten keine Möglichkeit, sie zu unterscheiden). Ich würde'grep' verwenden, möglicherweise mit '-v'-Flag für die Negation.
%Vor% Wenn ls
nicht Ihr einziger akzeptabler Befehl ist, können Sie auch find
mit regex
verwenden, um Ihren Zweck zu erreichen:
Erstellen Sie alle Testdateien:
touch Test{,1,2,3,4,5,6,7,8,9,10}
Finden Sie Ihre erste Gruppe von Dateien mit regex
:
find -type f -regex "\./Test\([5-9]\|10\)"
Reverse ist einfach, fügen Sie einfach !
vor der Option -regex
:
find -type f ! -regex "\./Test\([5-9]\|10\)"
Es funktioniert unter Linux Bash.
Tags und Links bash pattern-matching