Cambia ricorsivamente il proprietario dei file, ma non le directory


14

Ho una directory che ha ~ 50k directory e ~ 1m file.

Voglio cambiare il proprietario (o l'autorizzazione) di tutti i file, ma non delle directory. Questo perché sto provando a SCP file aggiuntivi da un server remoto, (directory ~ 150k e file ~ 3.6m).

La directory che ho fa parte della directory remota, ma lo scp non è riuscito ...

Se eseguo nuovamente SCP, ricomincerà sovrascrivendo i file che ho già copiato dalla directory remota.

Risposte:


20

È possibile utilizzare find, ha un ulteriore vantaggio che ARG_MAXnon verrà attivato nel processo. Dalla directory principale:

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

Per chmod:

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

-type fsarà findsolo file.


1
Funziona davvero alla grande! Grazie! +1 per chmod e chown
Marcus Brunsten,

2
Quindi findnon si innesca ARG_MAX? Ho sempre pensato che avrebbe dovuto. Impari sempre qualcosa :)
kos

5

Un'altra alternativa è usare xargs. Dovrai utilizzare l' -print0opzione con finde -0un'opzione corrispondente di xargs:

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

Da man find:

print0

stampa il nome file completo sull'output standard, seguito da un carattere null . Ciò consente ai nomi di file che contengono newline o altri tipi di spazi bianchi di essere interpretati correttamente dai programmi che elaborano l'output find. Questa opzione corrisponde all'opzione -0 di xargs.

xargsgestirà anche correttamente ARG_MAX.


2
find..execgestisce nomi di file strani ... cosa ti fa pensare di no?
Hememl

1
@heemayl Ho eseguito alcuni test e sembra che tu abbia ragione. Sono corretto. Grazie per averlo sottolineato, ho aggiornato la mia risposta.
AP
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.