¿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.

Grzegorz Wierzowiecki
fuente
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
asesino
fuente
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
Etienne Dublé
fuente
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
burtsevyg
fuente
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
cira
fuente
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
Alek
fuente
-3

Necesita el "-r" para copiar un directorio.

triples
fuente
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