Besitzer von Dateien rekursiv ändern, Verzeichnisse jedoch nicht

14

Ich habe ein Verzeichnis mit ~ 50k Verzeichnissen und ~ 1m Dateien.

Ich möchte den Eigentümer (oder die Berechtigung) aller Dateien ändern, aber nicht der Verzeichnisse. Dies liegt daran, dass ich versuche, zusätzliche Dateien von einem Remote-Server zu scannen (ca. 150.000 Verzeichnisse und ca. 3,6 Millionen Dateien).

Das Verzeichnis, das ich habe, ist ein Teil des Remote-Verzeichnisses, aber der SCP ist fehlgeschlagen ...

Wenn ich SCP erneut starte, werden die Dateien, die ich bereits aus dem Remote-Verzeichnis kopiert habe, überschrieben.

Marcus Brunsten
quelle

Antworten:

20

Sie können verwenden find, es hat den zusätzlichen Vorteil, dass das ARG_MAXnicht im Prozess ausgelöst wird. Aus dem übergeordneten Verzeichnis:

find . -type f -exec chown newowner {} +

Für chmod:

find . -type f -exec chmod 644 {} +

-type fwird findnur Dateien.

heemayl
quelle
1
Funktioniert wirklich super! Vielen Dank! +1 für chmod und chown
Marcus Brunsten
2
Also findnicht auslösen ARG_MAX? Ich dachte immer, dass es hätte. Man lernt immer etwas :)
kos
5

Eine andere Alternative ist zu verwenden xargs. Sie müssen die -print0Option mit findund eine entsprechende -0Option von verwenden xargs:

find . -type f -print0 | xargs -0 chown newuser:newgroup

Von man find:

-print0

Drucken Sie den vollständigen Dateinamen in der Standardausgabe, gefolgt von einem Null-Zeichen . Auf diese Weise können Dateinamen, die Zeilenumbrüche oder andere Arten von Leerzeichen enthalten , von Programmen, die die Suchausgabe verarbeiten , korrekt interpretiert werden. Diese Option entspricht der Option -0 von xargs.

xargswird auch richtig handhaben ARG_MAX.

AP
quelle
2
find..execgeht mit seltsamen Dateinamen um ... was lässt Sie denken, dass dies nicht der Fall ist?
Heemayl
1
@heemayl Ich habe einige Tests durchgeführt und es scheint, dass Sie Recht haben. Ich stehe korrigiert. Vielen Dank für den Hinweis, ich habe meine Antwort aktualisiert.
AP