xargs + chmod - Datei oder Verzeichnis nicht gefunden

xargs + chmod - Datei oder Verzeichnis nicht gefunden

Ich versuche, die Berechtigung aller Dateien und Verzeichnisse in meinem Projekt rekursiv zu ändern.

Ich habe einen ... gefundenBeitrag im Magento-Forumsagen, dass ich diese Befehle verwenden kann:

find ./ -type f | xargs chmod 644
find ./ -type d | xargs chmod 755
chmod -Rf 777 var
chmod -Rf 777 media

Es hat funktioniert für find ./ -type d | xargs chmod 755.

Der Befehl find ./ -type fhat viele Dateien zurückgegeben, aber ich komme chmod: access to 'fileXY.html' not possible: file or directory not foundan alle Dateien, wenn ich ihn ausführe find ./ -type f | xargs chmod 644.

Wie kann ich das lösen?

PS: Ich weiß, dass er empfohlen hat, für meine Var- und Medienordner die Berechtigung 777 zu verwenden, was ein Sicherheitsrisiko darstellt, aber was sollten wir sonst verwenden?

Antwort1

Ich vermute, Sie stoßen auf Dateien, deren Namen Zeichen enthalten, die xargszu einer Aufteilung führen.z.BLeerzeichen. Um dies zu beheben, sollten Sie, vorausgesetzt, Sie verwenden eine Version von findund xargs, die die entsprechenden Optionen unterstützt (die aus den GNU-Varianten stammen und nicht von POSIX angegeben werden), stattdessen die folgenden Befehle verwenden:

find . -type f -print0 | xargs -0 chmod 644
find . -type d -print0 | xargs -0 chmod 755

oder noch besser,

chmod -R a-x,a=rX,u+w .

Dies hat den Vorteil, dass es kürzer ist, nur einen Prozess verwendet und unterstützt wird durchPOSIXchmod(sehendiese Antwortfür Details).

Ihre Frage zu mediaund varist recht allgemein gehalten. Wenn Sie an spezifischen Antworten interessiert sind, schlage ich vor, dass Sie sie als separate Frage mit weiteren Informationen zu Ihrer Verwendung der Verzeichnisse stellen.

Antwort2

Wie wäre es mit:

find ./ -type d -exec chmod 755 {} +

Dies ist die kanonische portable Lösung, die sogar mit Zeilenumbrüchen in Dateinamen zurechtkommt.

verwandte Informationen