Ich muss eine Dateiliste von einem Datenträger generieren. Einige der Verzeichnisse (alle versteckten Verzeichnisse unter dem Root-Verzeichnis) haben seltsame Berechtigungen, was dazu führt, dass sich find beschwert.
Ich versuche alle diese Pfade auszuschließen, aber ein Verzeichnis beschwert sich immer noch:
find . -type f -not -path './.*/*'
find: ./.DocumentRevisions-V100: Permission denied
Die Rechte sind wie folgt (vom Betriebssystem so festgelegt, also gehe ich davon aus, dass sie nicht verändert werden sollten).
d--x--x--x root wheel .DocumentRevisions-V100
Wie ändere ich den find
Anweisung, alle versteckten Verzeichnisse effektiv wegzulassen, um sich nicht zu beschweren. (Ich möchte 2>/dev/null
nicht ausführen wie ich über andere Probleme wissen möchte).
Akzeptierte Antwort:
Mit GNU find oder jedem anderen find, das -readable
unterstützt und -executable
Prädikate:
find . -type d ! ( -readable -executable ) -prune -o -type f -not -path './.*/*' -print
Zuerst beschneiden wir Verzeichnisse, die nicht passierbar sind. Wenn diese Bedingung nicht zutrifft, versuchen Sie es mit der/den anderen Bedingung(en).
Wenn Ihr find
diese Optionen nicht hat, können Sie die Dateiberechtigungen abgleichen.
find . -type d ! -perm -u+rx -prune -o -type f ! -path './.*/*' -print