Tengo el requisito de crear una imagen reflejada de los directorios y subdirectorios de carpetas de Linux existentes como se muestra a continuación.
tenemos el directorio "/opt/current" que tiene otra capa de 20 subdirectorios y una capa más con 50 subdirectorios y así sucesivamente... algunas capas más profundas para subdirectorios y en total tenemos 1000 directorios de padre a hijo. /opt/current está montado en el dispositivo Oracle ZFS.
Cómo crear una estructura exacta de directorios/subdirectorios espejo en una nueva ubicación /opt/New, no manualmente como directorio uno a uno y aplicar permisos. /opt/New está montado en otro dispositivo ZFS.
¿Existe alguna manera/script de crear una estructura de directorio completa de padre a hijo con el mismo propietario/grupo/otro permiso en /opt/Nueva ruta que en /opt/actual ruta?
gracias, cg
Respuesta1
rsync -av --include='*/' --exclude='*' /opt/current/ /opt/New
Esto se utilizaría rsyncpara duplicar exactamente la estructura de directorios /opt/localy /opt/Newevitar copiar cualquier archivo.
La -aopción ( --archive) aseguraría que se conserven todos los permisos, etc. (esta opción también implica una copia recursiva), y -v( --verbose) le daría una indicación del progreso del comando.
Con --include='*/'incluimos explícitamente cualquier directorio en la transferencia, pero excluimos todo lo demás con --exclude='*'. El orden de estas opciones en la línea de comando es importante.
El /final de /opt/current/también es importante, ya que sin él, el resultado sería crear /opt/New/currenten lugar de escribir /opt/Newdirectamente.
Respuesta2
POSIXly y asumiendo que los nombres de directorio no contienen caracteres de nueva línea y $srcdirson $dstdirrutas absolutas:
(cd -P "$srcdir" && find . -type d | pax -rwdpe "$dstdir/")
Algunas paximplementaciones admiten la obtención de listas de archivos delimitadas por NUL para copiar con una -0opción para permitir nombres de archivos con NUL:
(cd -P "$srcdir" && find . -type d -print0 | pax -0rwdpe "$dstdir/")
( -print0también es una extensión que no es POSIX).
Respuesta3
Alternativamente arsync
find /opt/current -type d -print0 | cpio -0pma backup/dir/
Respuesta4
Puedes crear un script como el siguiente... ponerlo en un archivo:
-- La sintaxis del script bash/ksh deberá cambiar dependiendo del shell ----
find . -name "*"|while read line
do
if [[ -d ${line} ]]
then
echo ${line}
fi
do
en el servidor estás haciendo el archivo
cat file |while read line
do
mkdir ${line}
done


