Verzeichnisse ohne schließende Klammer ')' suchen

Verzeichnisse ohne schließende Klammer ')' suchen

Ich versuche, alle Videoverzeichnisse (keine Dateien) aufzulisten, die nicht mit einer Jahreszahl enden, (2015)und insbesondere alle Verzeichnisse, in denen keine Jahreszahl angegeben ist und die daher nicht mit einer schließenden Klammer enden ).

Wie kann ich das Gegenteil von Folgendem tun:

# List all files and directories end with '(2015)'
ls -ld *\(2015\)

# List all files and directories end with ')'
ls -ld *\)

Kann mir jemand erklären, wie das geht?

Antwort1

Versuche dies:

ls -ld *[^\)]

[] - Satz von Zeichen, die uns interessieren

^ - Negation (damit wir Zeichensätze einschließen, die wir nicht wollen)

\) - entkam ')'

Antwort2

In Bash oder Zsh:

for i in *; do [ -d "$i" ] && [[ ! "$i" =~ \)$ ]] && printf "%s\n" "$i"; done

Dadurch werden einfach alle Dateien und Verzeichnisse im aktuellen Verzeichnis durchlaufen und überprüft, ob i) es sich um ein Verzeichnis handelt ( [ -d "$i" ])und ii) ihr Name nicht mit )( endet [[ ! "$i" =~ \)$ ]]. Elemente, die beide Tests bestehen, werden ausgedruckt.

Dies kann mit beliebigen Dateinamen umgehen (das lskann nicht).

Antwort3

Methode 1a:

ls -ld -- *[^\)]

(unter Verwendung des […]Musters der Pfadnamenerweiterung (Platzhalter/Glob): [abc]entspricht a, b, oder c; [^abc]entspricht allem außer a, b, oder c; [^\)]entspricht also allem außer ).)

Methode 2a:

GLOBIGNORE="*)"
ls -ld -- *

Ziemlich selbsterklärend?

Beide Methoden stimmen mit Dateien und anderen Objekten überein, die keine Verzeichnisse sind.


Aktualisiert mit dem Vorschlag von don_crissti, nur Verzeichnisse zu finden:

Methode 1b:

ls -ld -- *[^\)]/

Methode 2b:

GLOBIGNORE="*)/"
ls -ld -- */

/Beachten Sie, dass Sie im Wert einschließen müssen GLOBIGNORE.

Antwort4

POSIX:

find . ! -name . -prune -type d ! -name '*)'

Mit zsh:

print -rl -- *[^\)](/)

Andere Shells wie Bourne haben keine Möglichkeit, Globbing-Ergebnisse zu filtern. Sie können Folgendes verwenden:

printf '%s\n' *[!\)]/

um nur Verzeichnisse abzugleichen. Aber es wird Ihrem Erweiterungsergebnis ein abschließender Schrägstrich hinzugefügt. Mit Verzeichnis fooerhalten Sie foo/.

verwandte Informationen