14 votos

Archivo de copia de los permisos, pero no los archivos en Unix

(De : http://stackoverflow.com/questions/15245144/copy-file-permissions-but-not-filescerrado debido a off-topic)

Tengo dos copias de la misma árbol de directorios. Poseen casi los mismos archivos en ambas (una versión puede tener un par extra o archivos que faltan). Sin embargo, la mayoría de los archivos son comunes a ambos directorios (tienen las mismas rutas relativas y todo).

Asumir estos se encuentran en los directorios:

version1/
version2/

El problema es que los permisos en version1/ quedó en mal estado, y me gustaría copiar los permisos de version2/, pero hacerlo sin reemplazar los archivos en la versión 1/ que son más recientes.

Hay una forma automática de hacerlo a través de la shell de comandos o scripts?

15voto

Tom Aac Puntos 461

GNU cp sabe el --attributes-only bandera desde coreutils 8.6

--atributos-sólo no copia el archivo de datos, sólo los atributos

14voto

shearn89 Puntos 725

Mi versión de cp no tiene la --attributes-only bandera, por lo que he trabajado hasta el presente. Brevemente probado en carpetas simples, YMMV.

$> ls
version1/
version2/
$> ls -l version1/1/a
-rw-rw-r-- 1 alex alex 0 Feb  5 12:49 version1/1/a
$> ls -l version2/1/a
-rwxrwxrwx 1 alex alex 0 Feb  5 12:49 version1/1/a

$> find version1 -type f -printf '%P\n' | xargs -I {} \
    chmod --reference=version1/{} version2/{}

$> ls -l version2/1/a
-rw-rw-r-- 1 alex alex 0 Feb  5 12:49 version1/1/a

5voto

Feiticeir0 Puntos 364

Usted puede, pero no creo en un "modo automático" !

GNU chown y GNU chmod tienen un --reference=RFILE parámetro puede utilizar.

chown --reference=RFILE yourfile
chmod --reference=RFILE yourfile

Se utiliza RFILE configuración (permisos, propietario, grupo, etc..) y los copias a yourfile.

en el manual se explica en más detalle.

0voto

Maik Puntos 256

En mi caso, he resuelto mediante el uso de "stat" comando "find" y "vi" para crear una secuencia de comandos que se aplica permisos.

cd version1/
find . -exec stat -c '%a %n' "{}" \; > setPerm.sh
vi setPerm.sh

En el "vi" I insertan en todas las líneas de la "chmod" comando: %s/^/chmod /g He copiado el script en version2/ directorio y ejecutamos.

Otras soluciones que parece válido, pero no me los puso a prueba en el caso.

0voto

Tomofumi Puntos 3

Inspirado por Mariano Paniga la respuesta, creo que tengo uno mejor, que no necesitan vi y buscar/reemplazar los comandos. Estoy aún desea copiar la propiedad de la información (uid/gid).

cd version1/
find . -exec stat -c 'chmod %a %n; chown %U:%G %n' "{}" \; > /tmp/setPerm.sh
chmod u+x /tmp/setPerm.sh
cd ../version2
/tmp/setPerm.sh

Usted puede personalizar los comandos dentro de stat -c '...' en cualquier cosa que desee. Para todas las opciones disponibles, consulte man stat.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: