Dies ist meine erste Frage, obwohl ich schon eine Weile lauere.
Frage: Ich möchte find verwenden, um nur die Dateien in einem Verzeichnis mit Berechtigungen abzurufen, die nicht auf 644 (oder einen anderen Berechtigungswert) festgelegt sind. Gibt es eine kürzere Möglichkeit, dies zu schreiben, oder ist es die einzige Möglichkeit, nur die Optionen -perm und -or zu verwenden und jeden Berechtigungstyp außer 644 aufzulisten?
Dies ist Teil eines größeren Befehls, den ich beschleunigen wollte:
find /path/to/dir/ -type f -print0 | xargs -0 chmod 644
Ich hoffe, dass die Bereitstellung von xargs nur die Dateinamen, die aktualisiert werden müssen, es beschleunigen wird. Das Verzeichnis enthält ~ eine Million Dateien, aber nur ~ 10.000 müssen normalerweise aktualisiert werden. Ich denke, der Befehl ist langsam, weil er trotzdem alle Dateien weiterleitet. Vielleicht gibt es einen effizienteren Ansatz für den größeren Befehl. Lassen Sie mich wissen, wenn Sie einen kennen. Ich würde trotzdem gerne die Antwort auf diese Frage wissen. Übrigens kann ich die Berechtigungen nicht aktualisieren, bevor ich die Dateien zum Verzeichnis hinzugefügt habe.
quelle
Antworten:
Der
!
Operator gibt true zurück, wenn eine Bedingung false ist.Während also
-perm 0644
Dateien mit festgelegten rw-r - r---Berechtigungen! -perm 0644
übereinstimmen , stimmt dies mit denen überein, die diese Berechtigungen nicht haben.Der Befehl, den Sie benötigen, lautet:
quelle
Und
quelle
+
anstelle von\;
. Das macht die gleiche Art von Batching wie xargs.Zumindest mit GNU find kannst du das! Operator für Negation mit -perm. Zum Beispiel:
Möchten Sie anhand des Beispiels, das Sie geben, nur sicherstellen, dass die Eigentümer mindestens gelesen / geschrieben haben und jeder mindestens gelesen hat? Wenn ja, dann können Sie es einfach mit chmod tun:
quelle
Eine mögliche Lösung wäre, wenn Sie weniger Verzeichnisse haben, a ausführen
chmod -R 644 /path/to/dir
und dann a ausführenfind /path/to/dir -type d -exec chmod 755 {} \;
.quelle