Tengo una carpeta SOURCE que contiene varias carpetas de subnivel, cada una con sus propios archivos.
Quiero copiar esta carpeta en una nueva carpeta COPY donde necesito copiar la estructura del directorio pero mantener los archivos como enlaces simbólicos a los archivos originales en SOURCE y sus subcarpetas.
Respuestas:
Aquí está la solución en Linux y Cygwin no integrados:
Tenga en cuenta que SOURCE debe ser una ruta absoluta y tener una barra inclinada final. Si desea dar una ruta relativa, puede usar
fuente
SOURCE
es un camino relativo, entonces creo que sí. Pruébelo y, si esto no funciona, le sugiero que haga una nueva pregunta. Referencia a este por todos los medios.Hay al menos 2 utilidades estándar para construir un árbol de directorios sombra de un árbol existente, por lo que no es necesario escribir código aquí.
En primer lugar está
lndir(1)
elxutils-dev
paquete. Utiliza enlaces simbólicos a los archivos. Desde la página del manual:Una alternativa quizás mejor es simplemente usar
cp
con las opciones correctas como sugiere la respuesta aceptada. Solo daré más detalles útiles con suerte:Si no le importa preservar todos los atributos (propiedades / permisos, tiempos), reemplace la
a
opción (equivalente a-dr --preserve=all
) conr
(solo recursivo):fuente
lndir
también está disponible como un script de shell aquí en caso de que no esté instalado: opensource.apple.com/source/X11/X11-0.46.4/lndir.sh?txtPuedes probar un par de comandos de búsqueda como este:
fuente
Algo como esto hará lo que necesita.
Los directorios se crean en el árbol COPY de destino. Todo lo demás vuelve a la ruta absoluta dentro del árbol SOURCE. Asegúrese de que tanto SOURCE como COPY estén especificadas como rutas absolutas (comenzando por
/
).Si tiene que copiar un árbol grande y desea un informe de progreso por directorio, puede agregarlo
echo "$ITEM" >&2;
justo antes delmkdir
comando.(Miré
cp
ycpio
ninguno parece tener una opción para vincular a la fuente con enlaces simbólicos).fuente
{ mkdir -p "$COPY/$ITEM"; continue; }
ksh
guión ... pero parece que eso también es necesariobash
. FijaciónSi no hay directorios vacíos en SOURCE que deben copiarse
fuente
cp
todos modos estás asumiendo GNU , ¿por qué nocp -as
?Comenzaría por romper el perl:
File::Find
es un módulo útil que le permite ejecutar una subrutina específica en cualquier archivo dentro de un árbol de directorios. En este caso, el subcomprueba si es un directorio, y si lo es, hace unmkdir
o un archivo, en cuyo caso hace un enlace simbólico.fuente
Parece que estás buscando algo como la herramienta
rsnapshot
; crea copias de directorios arbitrarios y usa enlaces duros siempre que sea posible. (Eche un vistazo a la página del manual para ver si eso encaja).fuente