Quiero crear un clon de la estructura de nuestro servidor de archivos de varios terabytes. Sé que cp --parents puede mover un archivo y su estructura principal, pero ¿hay alguna forma de copiar la estructura del directorio intacta?
Quiero copiar a un sistema linux y nuestro servidor de archivos tiene CIFS montado allí.
Respuestas:
Podrías hacer algo como:
para crear la lista de directorios, luego
para crear los directorios en el destino.
fuente
find . -type d -print0 >dirs.txt
yxargs -0 mkdir -p <dirs.txt
. Esto hará que ambos comandos usen nulos como separadores en lugar de espacios en blanco.xargs
puede exceder la longitud máxima de comando del sistema cuando comienza a trabajar con pedidos de cientos o miles, así que use esto con precaución. (Encuentre el límite de longitud del comando congetconf ARG_MAX
.) Con muchos directorios, es posible que tenga que escribir un script para recorrer la salida.fuente
rsync
solución de la respuesta de Chen Levy en esta pregunta SO--
es un terminador de opción de utilidad GNU estándar. Significa "hey mkdir, cualquier argumento después de este, no es una bandera, así que trátelo como un argumento de archivo, incluso si comienza con un carácter '-'".Aquí hay una solución simple usando rsync:
Encontré esta solución allí
fuente
rsync -a --include '*/' --exclude '*' "$source" "$target"
No sé si está buscando una solución en Linux. Si es así, puede intentar esto:
fuente
Esto copia los atributos de los directorios y archivos, pero no los datos de los archivos:
Luego, puede eliminar los atributos de los archivos si no está interesado en ellos:
fuente
La siguiente solución funcionó bien para mí en varios entornos:
fuente
Esto funciona:
Simplemente reemplace SOURCE_DIR y DEST_DIR.
fuente
Esto resuelve incluso el problema de los espacios en blanco:
En el directorio original / fuente:
luego vuelva a crearlo en el directorio recién creado:
fuente
Sustituir
target_dir
ysource_dir
con los valores adecuados:Probado en OSX + Ubuntu.
fuente
¿Un script de Python de Sergiy Kolodyazhnyy publicado en Copiar solo carpetas, no archivos? :
o de la cáscara:
FYI:
fuente
Otro enfoque es usar el
tree
que es bastante útil y navegar por árboles de directorios en función de sus opciones sólidas. Hay opciones para solo directorio, excluir directorios vacíos, excluir nombres con patrón, incluir solo nombres con patrón, etc.man tree
Ventaja : puede editar o revisar la lista, o si realiza muchas secuencias de comandos y crea un lote de directorios vacíos con frecuencia
Enfoque : cree una lista de directorios usando
tree
, use esa lista como entrada de argumentos paramkdir
-dfi
enumera solo directorios, imprime la ruta completa para cada nombre, hace que el árbol no imprima las líneas de sangría,--noreport
Omite la impresión del informe de archivos y directorios al final de la lista del árbol, solo para que el archivo de salida no contenga ninguna pelusa.Luego vaya al destino donde desea los directorios vacíos y ejecute
fuente
Copiar directorio solo con permiso y propiedad asociados
fuente
Solución de 1 línea:
fuente
Si puede obtener acceso desde una máquina con Windows, puede usar xcopy con / T y / E para copiar solo la estructura de carpetas (la / E incluye carpetas vacías)
http://ss64.com/nt/xcopy.html
[¡EDITAR!]
Este usa rsync para recrear la estructura del directorio pero sin los archivos. http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html
En realidad, podría ser mejor :)
fuente
Aquí hay una solución en php que:
Crea un archivo como
syncDirs.php
con este contenido:Ejecútelo como usuario que tiene suficientes derechos:
sudo php syncDirs.php /var/source /var/destination
fuente