
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_MAX
dabei nicht ausgelöst wird. Aus dem übergeordneten Verzeichnis:
find . -type f -exec chown newowner {} +
Für chmod
:
find . -type f -exec chmod 644 {} +
-type f
werden find
nur Dateien.
Antwort2
Eine andere Alternative ist die Verwendung von xargs
. Sie müssen die -print0
Option mit find
und eine entsprechende -0
Option 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.
xargs
wird auch korrekt handhaben ARG_MAX
.