rsync solo nombres de archivo

3

¿Es posible, solo rsync los nombres de archivo? Tengo un cuadro de almacenamiento y quiero agregar los nombres de archivo (y sus rutas) a otro cuadro. Actualmente estoy creando cada archivo con touch(se crearán con un tamaño de 0 bytes). Lleva demasiado tiempo y me preguntaba si esto podría automatizarse rsync.

Si no, ¿hay alguna otra herramienta que permita esto? ¿O necesitaría codificar algo personalizado?

Devator
fuente
¿Algo como esto? find . -type d > direcotries find . -type f > filesy en remotocat direcotries | xargs -I this mkdir this cat files | xargs -I this touch this
semana
¿Por qué crear archivos vacíos? ¿Cuál es el punto de tener tantos archivos vacíos?
inolvidableid
@unforgettableid Los archivos vacíos son archivos simples .iso, necesarios para el panel de control de SolusVM en el maestro. Sin embargo, quiero un repositorio central para los ISO, que luego se reenviará a todos los nodos mientras que el maestro solo tiene archivos vacíos (necesarios para que el panel de control funcione).
Devator
1
@Devator: OK, entonces usted dice que los ISO reales se almacenan en un directorio en una PC con almacenamiento de ISO. Bueno, quizás podría usar un software para compartir archivos para montar ese directorio en la PC maestra. ¿Eso eliminaría su necesidad de sincronizar periódicamente los nombres de archivo? ¿Si no, porque no?
inolvidableid
1
@unforgettableid De hecho, sí, lo investigaré. ¡Gracias! :)
Devator

Respuestas:

4

Si su objetivo es crear archivos empy, entonces se puede crear una plantilla de esta manera:

#!/bin/bash
FILES=$1 # original structure
TMPL=$2  # where to create empty files
[[ -d $FILES ]] || exit 1
[[ -d $TMPL ]] || mkdir -p $TMPL || exit 1

cd $TMPL
find "$FILES" -type d -printf "$TMPL%p\0" | sort -z |xargs -0 -L 1000 mkdir -p
find "$FILES" -type f -printf "$TMPL%p\0" | xargs -0 -L 1000 touch

Esto crea el directorio de cada archivo del árbol original y toca los archivos en las carpetas creadas bajo TMPL.

Después de crear una carpeta "duplicada" con solo archivos vacíos, se puede enviar a cualquier host como cualquier otra carpeta:

rsync -av -e 'ssh -p 22 -l username' \
    /template/structure remotehost:/backup/templates/

La opción -e es opcional si el nombre de usuario es el mismo en ambos hosts y si sshd se ejecuta en el puerto predeterminado. Preste atención a lo que sucede cuando especifica una barra inclinada final en ambas o en las partes desde y hacia. Es significativo. El parámetro de host remoto puede ser una dirección IP en lugar de un alias.

Ярослав Рахматуллин
fuente
@Devator eche un vistazo a mi respuesta revisada
Ррослав Рахматуллин
Gracias, voy a usar esto :) Ya lo pensé con respecto a la sincronización de la carpeta vacía. ¡Salud!
Devator
Si además desea incluir enlaces simbólicos, agregue la siguiente línea al final del guiónfind "$FILES" -type l -printf "ln -s %l $TMPL%p\0" | xargs -0 -L 1000 sh -c
Florian Feldhaus el
0

rsyncen sí mismo no parece tener una opción para crear solo archivos. Sin embargo, puede probar varias formas en lugar de usar el tacto manualmente:

  • rsync el árbol de directorios, luego ejecutar finden la raíz de ese árbol y echo "" >en cada archivo
  • úselo findpara obtener una lista de árboles de directorios, luego mkdir -púselo en cada elemento de esa lista (posiblemente ordenando de manera inversa de antemano para minimizar el número de llamadas al sistema) y luego úselo touchen una lista de archivos creada de manera similar.

Sin embargo, elegiría la primera opción si el espacio está disponible, ya que conserva los permisos y los derechos de acceso (dados los argumentos apropiados para rsync).

Claudio
fuente
Sí, me gustaría hacer el primero, pero el problema es el espacio . :(
Devator
¿Quizás ejecutarlo solo en partes del árbol de directorios a la vez resolvería ese problema?
Claudio
No, no hay suficiente espacio.
Devator