Changer le propriétaire des fichiers récursivement, mais pas les répertoires

14

J'ai un répertoire qui contient ~ 50k répertoires et ~ 1m de fichiers.

Je souhaite changer le propriétaire (ou l'autorisation) de tous les fichiers, mais pas les répertoires. C'est parce que j'essaie de SCP des fichiers supplémentaires à partir d'un serveur distant, (~ 150k répertoires et ~ 3,6m de fichiers).

Le répertoire que j'ai fait partie du répertoire distant, mais le scp a échoué ...

Si je lance à nouveau SCP, il recommencera en écrasant les fichiers que j'ai déjà copiés du répertoire distant.

Marcus Brunsten
la source

Réponses:

20

Vous pouvez utiliser find, il a un avantage supplémentaire que le ARG_MAXne sera pas déclenché dans le processus. Depuis le répertoire parent:

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

Pour chmod:

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

-type fseront finduniquement les fichiers.

heemayl
la source
1
Fonctionne vraiment bien! Merci! +1 pour chmod et chown
Marcus Brunsten
2
Alors findne se déclenche pas ARG_MAX? J'ai toujours pensé que ça l'aurait fait. Vous apprenez toujours quelque chose :)
kos
5

Une autre alternative est d'utiliser xargs. Vous devrez utiliser l' -print0option avec findet une -0option correspondante de xargs:

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

De man find:

-print0

afficher le nom de fichier complet sur la sortie standard, suivi d' un caractère nul . Cela permet aux noms de fichiers qui contiennent des sauts de ligne ou d'autres types d'espaces blancs d'être correctement interprétés par les programmes qui traitent la sortie de recherche. Cette option correspond à l'option -0 de xargs.

xargsgérera également correctement ARG_MAX.

AP
la source
2
find..execgère les noms de fichiers étranges ... qu'est-ce qui vous fait penser que non?
heemayl
1
@heemayl J'ai effectué quelques tests et il semble que vous ayez raison. Je me suis trompé. Merci de l'avoir signalé, j'ai mis à jour ma réponse.
AP