
Tengo un directorio que tiene ~50k directorios y ~1 millón de archivos.
Quiero cambiar el propietario (o permiso) de todos los archivos, pero no de los directorios. Esto se debe a que estoy intentando realizar SCP de archivos adicionales desde un servidor remoto (~150.000 directorios y ~3,6 millones de archivos).
El directorio que tengo es parte del directorio remoto, pero el scp falló...
Si ejecuto SCP nuevamente, comenzará de nuevo sobrescribiendo los archivos que ya copié del directorio remoto.
Respuesta1
Puede utilizar find
, tiene la ventaja adicional de que ARG_MAX
no se activará en el proceso. Desde el directorio principal:
find . -type f -exec chown newowner {} +
Para chmod
:
find . -type f -exec chmod 644 {} +
-type f
sólo find
archivos.
Respuesta2
Otra alternativa es utilizar xargs
. Deberá utilizar la -print0
opción con find
y la -0
opción correspondiente de xargs
:
find . -type f -print0 | xargs -0 chown newuser:newgroup
De man find
:
-imprimir0
imprima el nombre completo del archivo en la salida estándar, seguido deun carácter nulo. Estepermite nombres de archivos que contienen nuevas líneas u otros tipos de espacios en blancopara ser interpretado correctamente por los programas que procesan la salida de búsqueda. Esta opción corresponde a la opción -0 de xargs.
xargs
también manejará correctamente ARG_MAX
.