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.

user3014282
quelle
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:

17

ls -ld .* wird tun was du willst.

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

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

periket2000
quelle
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 .*
cuonglm
quelle
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.

Valentin Bajrami
quelle
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.

Joseph R.
quelle
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"
Piroux
quelle
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 "^\./\."

GLK
quelle
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"
Azbarcea
quelle
-1

Du kannst es versuchen :

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

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

Lingjing Frankreich
quelle
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