Die Flagge wird in der lsManpage so beschrieben (Hervorhebung liegt bei mir) ...
Listen Sie keine impliziten Einträge auf, die mit dem Shell-MUSTER übereinstimmen
Die Manpage hat nicht viel über "impliziert" zu sagen. Was zum Teufel bedeutet das? Ein impliziter Eintrag (Datei, Verzeichnis usw.) ist ein Eintrag, der zurückgegeben lswird, ohne dass Sie explizit ein Argument angegeben haben, das diesem Eintrag entspricht. Eine Übereinstimmung kann entweder der tatsächliche Name des Eintrags sein ( ls books_tom.csv ...anhand Ihres Beispiels) oder ein Glob, der mit ihm übereinstimmt ( ls *tom.csvz. B.).
Wenn Sie lsohne Argumente aufrufen , ist alles, was zurückgegeben wird, impliziert! Ich gehe davon aus, dass die häufigste Verwendung von --ignoreeinem solchen ansonsten schmucklosen lsAufruf ist, da dies der einfachste Weg ist, eine Operation "Alles außer X auflisten" durchzuführen ... zumindest, wenn Sie die Verwendung anderer Befehle vermeiden möchten.
Schauen wir uns also Ihren Befehl an. Bei ls *.csv --ignore="*tom*""books_tom.csv" wird explizit über das passende Muster verwiesen *.csv. Mit ls --ignore="*tom*", gemäß dem vorherigen Absatz, ist alles im Verzeichnis impliziert, so dass "books_tom.csv" nicht angezeigt wird.
Wenn in Ihrer Shell erweitertes Globbing verfügbar ist (mit Bash, das Sie aktivieren können shopt -s extglob), können Sie das erreichen, was Sie möchten, indem Sie ein Muster erstellen, das "Tom" ausschließt. Zum Beispiel ls books_!(tom).csvwürde sich books_abby.csvaber nicht zeigen books_tom.csv.
(Natürlich können Sie auch andere Tools wie findPipe to grep -vusw. verwenden. Ich gebe nur eine reine lsLösung.)
grep?