Cambiar el propietario de los archivos de forma recursiva, pero no los directorios

Cambiar el propietario de los archivos de forma recursiva, pero no los directorios

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_MAXno se activará en el proceso. Desde el directorio principal:

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

Para chmod:

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

-type fsólo findarchivos.

Respuesta2

Otra alternativa es utilizar xargs. Deberá utilizar la -print0opción con findy la -0opció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.

xargstambién manejará correctamente ARG_MAX.

información relacionada