Bash Listet Dateien, die keinem Array von Mustern entsprechen, auf

8

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.

    
tfonias74 10.03.2017, 11:07
quelle

4 Antworten

8

Sie können ein Muster wie folgt umkehren:

%Vor%     
anubhava 10.03.2017, 11:17
quelle
2

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%     
marek.jancuska 10.03.2017 11:15
quelle
1

Ich bin nicht sicher, warum es nicht mit * funktioniert, aber es funktioniert mit spezifischeren Mustern:

%Vor%     
choroba 10.03.2017 11:27
quelle
1

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 :

    hinzu

    find -type f ! -regex "\./Test\([5-9]\|10\)"

Es funktioniert unter Linux Bash.

    
shizhz 10.03.2017 11:50
quelle

Tags und Links