Unter Linux habe ich eine Datei, die unter anderem viele Dateien und Verzeichnisse enthält, die wörtlich „Scrap“ enthalten. Ich kann sie ls *scrap*
problemlos durch Eintippen sehen. Allerdings werden dadurch auch Verzeichnisse zurückgegeben, die wörtlich „Scrap“ enthalten, und diese möchte ich ausschließen.
ls | grep ".*scrap.*"
Ich habe versucht, mit oder herumzuspielen, ls | grep scrap
aber dies gibt nur die Verzeichnisse zurück (nicht die normalen Dateien).
Warum ist das so?
Der nächste Schritt besteht darin (sobald der Mitarbeiter die korrekte Ausgabe zurückgibt), die Verzeichnisse aus dieser Ausgabe zu entfernen. Vorschläge dazu sind ebenfalls willkommen!
Antwort1
scrap
Tatsächlich benötigen Sie ls
+ nicht , um schließlich alle regulären Dateien im aktuellen Verzeichnis (auf der 1. Ebene) aufzulisten, die in ihrem Namen enthalten sind grep
.
Mit altem Gutenfind
Befehl:
find . -maxdepth 1 -type f -name "*scrap*" -ls
Antwort2
Sie bekommen Probleme, ls
wenn grep
Dateinamen Leerzeichen oder (schlimmer noch) Zeilenumbrüche enthalten. Aber mit sicheren Dateinamen können Sie Folgendes tun:
ls -l | grep -oP '^-.* \K.*$'
ls -l | sed -n '/^-/s/^.* //p'
Normalerweise sollten Sie diesen find
Ansatz jedoch verwenden.
Antwort3
Für die Namen der Nicht-Verzeichnisdateien im aktuellen Verzeichnis, die enthalten scrap
, in zsh
:
print -rC1 -- *scrap*(ND^/)
Beachten Sie, dass in ls *scrap*
(oder korrekter ls -- *scrap*
), wenn eine der *scrap*
Dateien vom TypVerzeichnis, dann ls
werden ihreInhalt(mit einem that-scrap-dir:
Header, sofern es nicht *scrap*
in eine und nur eine Datei erweitert wird, nämlich dieses Verzeichnis).
Wenn Sie das für Dateien vom TypVerzeichnis, ls
druckt einfach ihren Namen wie für andere Dateitypen, Sie müssen die -d
Option hinzufügen:
ls -d -- *scap*(D^/)
Es ergibt jedoch kaum einen Sinn, ls
die Dateien nach Namen und Typ zu suchen, da die Shell zum Zeitpunkt des Aufrufs die ganze Arbeit bereits erledigt hat ls
. Sie können also genauso gut die integrierten Funktionen print
oder printf
Ihrer Shell verwenden.
Antwort4
Sieht aus als obDasist die Antwort, nach der Sie suchen. Der Beitrag spricht davon, dass die Glob-Expansion der Grund dafür ist, dass nur bestimmte Dinge angezeigt werden.