Besitzer von Dateien rekursiv ändern, aber nicht von Verzeichnissen

Besitzer von Dateien rekursiv ändern, aber nicht von Verzeichnissen

Ich habe ein Verzeichnis mit ca. 50.000 Verzeichnissen und ca. 1 Million Dateien.

Ich möchte den Besitzer (oder die Berechtigung) aller Dateien ändern, aber nicht die Verzeichnisse. Dies liegt daran, dass ich versuche, zusätzliche Dateien von einem Remote-Server per SCP zu übertragen (~150.000 Verzeichnisse und ~3,6 Millionen Dateien).

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

Wenn ich SCP erneut ausführe, beginnt es von vorne und überschreibt die Dateien, die ich bereits aus dem Remote-Verzeichnis kopiert habe.

Antwort1

Sie können verwenden find. Dies hat den zusätzlichen Vorteil, dass ARG_MAXdabei nicht ausgelöst wird. Aus dem übergeordneten Verzeichnis:

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

Für chmod:

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

-type fwerden findnur Dateien.

Antwort2

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

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

Aus man find:

-drucken0

drucken Sie den vollständigen Dateinamen auf der Standardausgabe, gefolgt vonein Nullzeichen. Daserlaubt Dateinamen, die Zeilenumbrüche oder andere Arten von Leerzeichen enthaltenum von Programmen, die die Find-Ausgabe verarbeiten, korrekt interpretiert zu werden. Diese Option entspricht der Option -0 von xargs.

xargswird auch korrekt handhaben ARG_MAX.

verwandte Informationen