¿Cómo clonar / copiar todos los atributos de archivo / directorio en un archivo / directorio diferente?


15

Quiero copiar los atributos (propiedad, grupo, ACL, atributos extendidos, etc.) de un directorio a otro, pero no el contenido del directorio en sí.

Esto no funciona:

cp -v --attributes-only A B
cp: omitting directory `A'           

Nota: no tiene que ser así cp.


1
No pasó -r, por lo que ignora los directorios. Pero supongo que quieres copiar solo los atributos, no los contenidos. Solo puedo pensar en hacks feos. También tenga en cuenta que installpuede preservar contextos SELinux.
lynxlynxlynx

3
posible duplicado de la propiedad
Gilles 'SO- deja de ser malvado'

1
@Gilles, gracias por señalar otro tema. Resuelve parte del problema: propiedad y modo. ¿Qué pasa con los atributos extendidos?
Grzegorz Wierzowiecki

1
@GrzegorzWierzowiecki Me temo que muy pocas herramientas admiten atributos extendidos. Si son importantes, use la sugerencia rsync de killermist.
Gilles 'SO- deja de ser malvado'

Por cierto. Aquí hay buenos ejemplos en los que uno puede ver xattrs en acción: GUI de Dolphin en KDE: imgur.com/oguuJNm o URL desde donde se descargó el archivo establecido por los navegadores: referencias: gist.github.com/gwpl/a00e18bc150f1e3518335d13c5e46ad7 + freedesktop.org/ wiki / CommonExtendedAttributes + vhanda.in/blog/2014/07/tagging-your-files
Grzegorz Wierzowiecki

Respuestas:


13

Después de bastante prueba y error en la línea de comandos, creo que he encontrado la respuesta. Pero no es una cprespuesta relacionada.

rsync -ptgo -A -X -d --no-recursive --exclude=* first-dir/ second-dir

Esto hace:

-p, --perms                 preserve permissions
-t, --times                 preserve modification times
-o, --owner                 preserve owner (super-user only)
-g, --group                 preserve group
-d, --dirs                  transfer directories without recursing
-A, --acls                  preserve ACLs (implies --perms)
-X, --xattrs                preserve extended attributes
    --no-recursive          disables recursion

Para referencia

    --no-OPTION             turn off an implied OPTION (e.g. --no-D)
-r, --recursive             recurse into directories

Esa última edición es definitivamente un éxito allí. Con o sin un / en el segundo directorio, que finalmente hace exactamente lo que se le pide, parece.
killermist

La barra inclinada final solo hace una diferencia en el primer argumento, no en el segundo. Se explica en el tercer o cuarto párrafo de la USAGEsección de la rsync(1)página del manual.
jw013

@ jw013 Después de leer la documentación de rsync repetidamente, hace meses, mi conclusión fue que las barras inclinadas eran un "into" implícito, ya sea en el primer (segundo, tercer, etc.) o último argumento. Pero, de nuevo, a menudo termino mis comandos con un / en el último argumento para implicar / exigir un "efecto".
killermist

Mi instinto es copiar todos los atributos del directorio y ningún archivo normal sería rsync -a -AX --include='*/' --exclude='*'. No he probado
Gilles 'SO- deja de ser malvado'

@ jw013 Gracias por ayudarme a obtener esta respuesta. Intenté MUCHAS opciones en mi pequeño entorno de prueba de sandbox, y seguí acercándome, pero tener una parte no funcionó correctamente.
Killermist

0
chmod --reference=first-dir second-dir

2
Esto no funcionará de forma recursiva, y creo que no copiará ACL o atributos extendidos.
Mat

1
No se supone que sea recursivo: el OP solicitó "no el contenido del directorio en sí mismo", y la respuesta aceptada le dice a rsync --no-recursive. El problema con esta respuesta es que no hace ACL o XATTR.
ShadSterling

0
cp -rfp from_dir to_dir
  • -r - recursivo
  • -f - fuerza
  • -p - preservar atributos: modo, propiedad, marcas de tiempo

También necesita, solo
atributos

0

No entiendo porque parece funcionar para otros, pero el método rsync me falla en FreeBSD con ZFS. No pasa nada. Sin embargo, el método de Jean-François Dockes funciona. (ver: https://www.lesbonscomptes.com/pxattr/ ) Directorio de origen = A y directorio de destino = B, de la pregunta original.

pxattr -lR A > tmp.EAs

(edite la primera línea de tmp.EAs para cambiar el directorio A a B, s / A / B /)

pxattr -S tmp.EAs

Entonces, no solo estás recomendando el método de otra persona ; Estás recomendando el programa de otra persona , ¿verdad? Está bien, pero perdí cinco minutos buscando documentación en un programa no estándar poco conocido. Sería bueno si declaras más claramente que estás recomendando que las personas descarguen un programa no estándar poco conocido.
G-Man dice 'Reincorporar a Monica' el

encogerse de hombros Está en el árbol de puertos. Eso no lo hace exactamente no estándar. No es tan oscuro como pyxattry lo intenté también. Era una especie de nuez difícil de roer. Supuestamente gnu cp funciona para esto, pero no puedo hacer que funcione. Los atributos extendidos merecen algo mejor que esto. Además, pxattr funciona al menos en linux, osx y bsd.
cira

0
rsync -aAX --exclude='*' src_dir/ dst_dir

donde dst_dir: es un directorio de destino. O:

rsync -dADXgot src_dir dst_dir

donde dst_dir: es un directorio que contiene el directorio de destino o un directorio de destino no existente.

Desde la página del manual de rsync:

    -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
        --exclude=PATTERN       exclude files matching PATTERN

    -d, --dirs                  transfer directories without recursing
    -p, --perms                 preserve permissions
    -A, --acls                  preserve ACLs (implies -p)
    -X, --xattrs                preserve extended attributes
    -o, --owner                 preserve owner (super-user only)
    -g, --group                 preserve group
        --devices               preserve device files (super-user only)
        --specials              preserve special files
    -D                          same as --devices --specials
    -t, --times                 preserve modification times

-3

Necesita el "-r" para copiar un directorio.


2
Creo que te he entendido mal, no necesitas el contenido, solo el xattr. Si fuera para SELinux, podría usar chcon haciendo referencia al directorio original (A).
tripledes

-rimplica la copia de todos los subdirectorios y archivos en ellos ... No quiero copiar todo el árbol ... Quiero copiar atributos para un solo directorio, sin afectar su contenido.
Grzegorz Wierzowiecki
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.