Versteckte Dateien bei der Suche mit Unix / Linux ausschließen?


35

Welche Optionen muss ich verwenden find, um versteckte Dateien auszuschließen?


4
Abgesehen davon: Der Grund, warum es für diese Aufgabe keine spezielle Unterstützung gibt, ist, dass das einzige Besondere an Dateien mit einem führenden '.' ist, dass es nicht aufgeführt werden, lswenn nicht ausdrücklich angefordert: Es handelt sich in jeder Hinsicht um ganz gewöhnliche Dateien, es ist nur so, dass lsSie sie standardmäßig ignorieren können.
dmckee

2
Frage: Möchtest du so etwas verstecken .hidden/visible.txt?
Keith Thompson

Antworten:


14

Ich fand das hier :

find . \( ! -regex '.*/\..*' \) -type f -name "whatever"

Warum nicht einfach \( ! -name '.*' \)?
Grawity

@grawity Ich habe das gerade gefunden, ich weiß nicht ganz, wie es funktioniert. Würden Sie nicht nur versteckte Dateien, sondern auch versteckte Verzeichnisse und all ihre Unterinhalte und versteckten Dateien in Unterordnern verstecken?
Jarvin

5
Nein, es würde nicht: / Aber \( ! -path '*/.*' \)würde.
Grawity

@grawity Ya, ich schätze, ich habe eine Vermutung darüber gemacht, was das OP wollte ... Ihre Namenslösung kommt wahrscheinlich dem am nächsten, wonach sie gefragt haben.
Jarvin

@ grawity & Dan: Ist es nicht (! -Pfad '^. *') ?? Ihre Lösungen ignorieren alle Dateien mit einem '.' irgendwo im Dateinamen wie a.exe, b.out etc ....
Software Mechanic

13

Es scheint, dass das Glob-Muster der Negation nicht gut bekannt ist. So können Sie verwenden:

find . -name "[!.]*"

12

Dies beantwortet Ihre Frage nicht, aber für die Aufgabe, nicht versteckte Dateien zu finden, möchte ich alle Dateien finden lassen und dann mit grep filtern.

find . -type f | grep -v '/\.'

Ähnlich wie Ihr Ansatz, aber vielleicht ein bisschen einfacher.


Dies war der einzige Liner, der für mich funktioniert hat.
8.

7

Versuchen Sie die folgende findVerwendung:

find . -type f -not -path '*/\.*'

Was alle versteckten Dateien (Dateien und Verzeichnisse, die mit einem Punkt beginnen) ignorieren würde.


1

Ich habe ein Skript namens geschrieben, findnhdas meiner Meinung nach bestimmte Randfälle besser behandelt als die Antworten auf diese Frage, die ich im Internet gefunden habe.

#!/bin/bash

declare -a paths

while [ $# -ne 0 ]; do
  case "$1" in -*) break ;; esac
  paths+=("$1")
  shift
done

find "${paths[@]}" \( -name . -o -name .. -o \! \( -name '.*' -prune \) \) "$@"

Beispielsweise können Sie nicht ausgeblendete Dateien und Verzeichnisse in einem explizit angegebenen ausgeblendeten Verzeichnis mit einem Befehl wie findnh ~/.hiddendir/dem folgenden suchen , der ~/.hiddendir/filejedoch nicht angezeigt wird ~/.hiddendir/.superhiddenfile.


1
Nettes Stück Codierung. Außer wenn ich es versuche findnh ~/.hiddendir/, bekomme ich nichts. Wie unterscheidet sich das von ! -path '*/.*'und find … | grep -v '/\.'?
G-Man sagt, dass Monica

1

Wenn Sie Ziele ist es findund grep, ripgreptut versteckte Dateien standardmäßig ausschließen, zB

rg --files

--files Drucken Sie jede Datei, die durchsucht werden würde, ohne die Suche tatsächlich durchzuführen.


1

fd

Verwenden Sie fdeine einfache, viel schnellere und benutzerfreundliche Alternative zu find. Standardmäßig ist es:

  • Ignoriert standardmäßig versteckte Verzeichnisse und Dateien.
  • Ignoriert standardmäßig Muster von .gitignore.

Überprüfen Sie die Benchmark-Analyse .


1

So finden Sie versteckte Dateien:

find -name '[.]*'

So finden Sie sichtbare Dateien:

find -name '[!.]*'

So einfach ist das.

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.