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.

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.


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.


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
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.