Ich habe ein Verzeichnis, in dem viele Dateien (ca. 200) mit dem Namen temp_log.$$
erstellt werden, zusammen mit mehreren anderen wichtigen Dateien, die ich überprüfen muss.
Wie kann ich einfach alle Dateien auflisten und die temp_log.$$
Dateien von der Anzeige ausschließen?
Erwartete Ausgabe
$ ls -lrt <exclude-filename-part>
-- Lists files not matching the above given string
Ich habe die ls
Manpage durchgesehen , aber in dieser Referenz nichts gefunden. Bitte lassen Sie mich wissen, wenn ich hier wichtige Informationen verpasst habe.
Vielen Dank
ls --hide='temp_log.$$'
sollte funktionieren. Sie könnten / sollten dies auch mit Platzhaltern erweitern, je nachdem, welcher Teil des gesamten Begriffstemp_log.$$
ist.Antworten:
Mit GNU
ls
(die Version unter nicht eingebettetem Linux und Cygwin, die manchmal auch an anderer Stelle zu finden ist) können Sie einige Dateien ausschließen, wenn Sie ein Verzeichnis auflisten.(Beachten Sie die lange Form von
-I
ist--ignore='temp_log.*'
)Mit zsh können Sie die Shell filtern lassen. Übergeben
-d
anls
, um das Auflisten des Inhalts übereinstimmender Verzeichnisse zu vermeiden.Mit ksh, bash oder zsh können Sie die ksh-Filtersyntax verwenden. Führen Sie in zsh
setopt ksh_glob
zuerst aus. Führen Sie in der Bashshopt -s extglob
zuerst aus.quelle
-Itemp_log.*
nach dem-I
-I
. Es muss jedoch*
so oder so zitiert werden.-I temp_log.*
nicht funktioniert , sondern-I 'temp_log.*'
,-I "temp_log.*"
,-I temp_log.\*
etc. sind in Ordnung.Sie können
grep
mit der Option verwenden-v
.quelle
Sie können dafür verwenden
find
:Dadurch werden nur die Namen gedruckt, die Sie hinzufügen können
-ls
, um einels -l
Stilausgabe mit Zeitstempel und Berechtigungen zu erstellen, oder um-exec ls {} +
sie tatsächlich mit den gewünschten Optionen für Spalten, Sortieren usw. an ls zu übergeben.Ich schrieb dies unter der Annahme, dass dies nur Dateien in einem Verzeichnis waren. Wenn das Verzeichnis andere Verzeichnisse enthält, möchten Sie diese möglicherweise nicht rekursiv auflisten
Und wenn Sie ls verwenden, möchten Sie die Option -d übergeben, um zu verhindern, dass es in den Verzeichnissen aufgeführt wird:
-exec ls -d {} +
quelle
-maxdepth 1
auch nicht rekursiv imitierenls
.find
ohne haben,-maxdepth
sollten hier suchen .Ich denke, Sie möchten ein Feature der Shell verwenden, nicht von
ls
. Ich benutze Bash, also habe ich nach Ihren Wünschen gesuchtman bash
. Suchen Sie nach "^ EXPANSION" (indem Sie zuerst '/' drücken). Auszug:Ich habe kürzlich begonnen, Dateien basierend auf ihrem Anfangsbuchstaben mit einem Befehl wie dem folgenden auszuschließen:
Dies würde zu allem passen, was nicht mit dem Buchstaben beginnt
t
. Wenn Sie zwischen den Klammern weitere Zeichen einfügen, schließen Sie auch Dateien aus, die mit diesen Buchstaben beginnen.Auf der Suche nach einem Link, und ich habe einen guten! Siehe Mustervergleich . Von dort aus würde dies für Ihren Fall funktionieren:
Dies setzt voraus , dass die
extglob
Shell-Option mit Hilfe vonshopt
builtin (shopt -s extglob
) aktiviert ist , wie von Gilles angegeben .quelle
Mach einfach
quelle
grep
Sucht nach einem Muster in einer Datei und nicht nach dem Dateinamen.Da die Dateien , die Sie DONT wollen , müssen gedruckt „temp_log.“ im Dateinamen, dann mit grep herausfiltern:
HINWEIS: Der andere Beitrag mit einer ähnlichen Antwort wurde wahrscheinlich abgelehnt, weil der Benutzer keine Anführungszeichen "" um die Zeichenkette eingefügt hat, nach der grep suchen sollte. Ohne die Anführungszeichen funktioniert es nicht wie angekündigt.
quelle
temp_log
. Dies ist kein guter (allgemeiner) Weg, umls
Ergebnisse auszuschließen .-F
, @ smokes2345; Ein Punkt entspricht einem beliebigen Zeichen in einem regulären Grundausdruck. Siehe: unix.stackexchange.com/q/119905/117549