Nur Dateien anzeigen, die mit beginnen. (versteckt)


11

Ich habe versucht, nur versteckte Dateien anzuzeigen, weiß aber nicht, wie ich das machen soll.

Das funktioniert (aber auch Punkte an anderen Stellen)

ls -la | grep '\.'

Ich habe versucht hinzuzufügen ^, aber keine Lösung gefunden.


1
Das Parsen lsist nie eine wunderbare Idee, aber was Sie versucht haben, hätte funktioniert, wenn Sie den Anker verwendet hätten ^, um den Beginn des Spiels zu kennzeichnen. ls -la | grep '^\.'
devnull

3
Nein, der Dateiname ist nicht der Anfang der Zeile mit dem Flag -l. ls -la | awk '$9 ~ /^\./'werden.
Yoonix

Antworten:



4
find . -type f -name '\.*' -print 

Muss funktionieren, wenn Sie jede versteckte Datei in der Verzeichnishierarchie auflisten möchten.


2

Wenn Sie die lsAusgabe analysieren möchten , müssen Sie sie ^zu Beginn der Regex hinzufügen und die -lOption nicht verwenden . Die Verwendung -lbewirkt, dass jede Zeilenausgabe mit Datei- oder Ordnerberechtigungsinformationen beginnt, nicht mit Datei- oder Ordnernamen. Sie sollten also Folgendes verwenden:

ls -Ad | grep '^\.'

Oder Sie können mit printfbash eingebaut tun :

printf "%s\n" .*

Wenn Sie verwenden zsh, können Sie verwenden:

print -l .*

1

Hier sind zwei weitere Möglichkeiten, um nur versteckte Dateien zu finden.

find . -maxdepth 1 -name ".*" -type f -ls

oder

find . -maxdepth 1 -name ".*" -type f -printf "%P \n"

Verwenden -maxdepthSie diese Option, um anzugeben, wie weit Sie im Verzeichnisbaum suchen möchten.


1

Eine Verbesserung von Flups Antwort :

ls -lad .[!.]* ..?*

Dadurch werden alle Dateien aufgelistet, deren Name mit einem Punkt beginnt und die weder .noch sind ...

Beachten Sie, dass Sie, wenn Sie die Ausgabe von lsto weiterleiten möchten grep(was, wie von devnull hervorgehoben , niemals eine gute Idee ist), verwenden \lsoder command lsweil if lsein Alias ​​ist, um Ihnen eine farbige Ausgabe anzuzeigen (wie es beispielsweise bei Debian der Fall ist). Die Ausgabe enthält ANSI-Escape-Sequenzen, um eine farbige Ausgabe zu erstellen, die Ihre Ausgabe auslöst, grepwenn das Muster am Zeilenanfang verankert ist.


1
Sie können -A(anstelle von -a) verwenden, um zu ignorieren ., ...
OJFord

@ OJFord + -Aunterscheidet sich von -aVerzeichnissen, in die lsabsteigt, aber beide werden (gleichermaßen) ignoriert und sind für Namen, die in der Befehlszeile mit -dWirkung angegeben sind, unbrauchbar . Auch wenn lsein Alias ​​vorliegt, --color=auto ist die Rohrleitung in Ordnung. nur --color=alwaysoder --colorverursacht Ärger.
Dave_thompson_085

0

Die Lösung von val0x00ff ist wirklich gut, vergisst aber versteckte Verzeichnisse.

Wenn Sie versteckte Dateien und versteckte Verzeichnisse möchten , ohne. und .. :

find -maxdepth 1 -regex '\./\..+' -printf "%P\n"

Ihr Vorschlag schlägt unter VMware ESXi fehl (keine Dateien und keine Verzeichnisse auflisten) und schlägt auch unter Linux fehl (mit maxdepth> 1 werden auch alle Dateien in einem Verzeichnis aufgelistet, das mit a beginnt). Dies funktioniert jedoch sowohl unter Linux als auch unter ESXi: find . \( -type f -o -type d \) -name '\.*' -print;; maxdepthbei Bedarf anwenden .
Jeroen Wiert Pluimers

0

Unten ist man sehr kompakt und unterstützt viele Varianten

1) Zeigen Sie versteckte Dateien, Verzeichnisse und Unterverzeichnisse an

find . | grep "^\./\."

2) Zeigen Sie nur versteckte Verzeichnisse und Unterverzeichnisse an

find . -type d | grep "^\./\."

3) Versteckte Dateien nur in aktuellen und Unterverzeichnissen anzeigen

find . -type f | grep "^\./\."

4) Zeigen Sie versteckte Dateien und Verzeichnisse im aktuellen Ordner an

find . -maxdepth 1 | grep "^\./\."


0

Du kannst es versuchen:

find . -maxdepth 1 -type f -name '\.*' -print
find . -maxdepth 1 \( -type f -o -type d \) -name '\.*' -print

Natürlich können Sie verschiedene maxdepthWerte verwenden oder diese vollständig entfernen. Sehr hilfreich, wenn Sie zwischen Verzeichnissen ( -type d) oder regulären Dateien ( type f) oder beiden suchen und diese mit anderen Funktionen kombinieren möchten, z.

(zB letzte geänderte Zeit, basierend auf @piroux Beispiel - vervollständigt von @ jeroen-wiert-pluimers )

find . -maxdepth 1 \( -type f -o -type d \) -name '\.*' -exec stat -c %y {} \; -printf "%P\t"

-1

Du kannst es versuchen :

ls -a |grep -E  "^\."

^ zeigt an, dass dies der Beginn des Inhalts mit regulärem Ausdruck ist


1
Ein Duplikat einer anderen Antwort von vor 3 Jahren ...
Jeff Schaller

Ich habe die vorherige Antwort gesehen, sie ist nicht doppelt vorhanden, und definitiv haben "ls -a" und "ls -Ad" nicht die gleiche Bedeutung. "-a" bedeutet, dass alle einschließlich Dateien / Verzeichnisse mit "beginnen". -A bedeutet, alle außer "." , ".." und Verzeichnisinhalt.
Lingjing Frankreich
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.