Como dice el título, ¿cómo puedo copiar recursivamente una estructura de directorio pero solo incluir algunos archivos? Por ejemplo, dada la siguiente estructura de directorios:
folder1
folder2
folder3
data.zip
info.txt
abc.xyz
folder4
folder5
data.zip
somefile.exe
someotherfile.dll
Los archivos data.zip e info.txt pueden aparecer en cualquier parte de la estructura del directorio. ¿Cómo puedo copiar la estructura completa del directorio, pero solo incluir archivos llamados data.zip e info.txt (todos los demás archivos deben ignorarse)?
La estructura de directorio resultante debería verse así:
copy_of_folder1
folder2
folder3
data.zip
info.txt
folder4
folder5
data.zip
*.zip
trabajé para mí.Una solución alternativa que copia un archivo a la vez y no requiere ROBOCOPIA:
La instrucción for externa genera cualquier combinación de ruta posible de subdirectorio en
SOURCE_DIR
y nombre enFILENAMES_TO_COPY
. Para cada archivo existente se invoca xcopy.FILE_INTERMEDIATE_DIR
contiene la ruta del subdirectorio del archivo dentro delSOURCE_DIR
cual debe crearseDEST_DIR
.fuente
set FILENAMES_TO_COPY=data.zip info.txt
arriba aset FILENAMES_TO_COPY=*.jpg
set "SOURCE_DIR=C:\Origin Test"
yset "DEST_DIR=C:\Dest Test"
. Tenga en cuenta la ubicación de las comillas dobles.intente canalizar la salida de buscar (es decir, la ruta del archivo) en cpio
cpio verifica la marca de tiempo en los archivos de destino, por lo que es seguro y rápido.
elimine -v para una operación más rápida, una vez que se acostumbre.
fuente
Si Powershell es una opción, puede hacer esto:
La principal desventaja es que copia todas las carpetas, incluso si terminan vacías porque ningún archivo coincide con el filtro que especifica. Por lo tanto, podría terminar con un árbol lleno de carpetas vacías, además de las pocas carpetas que tienen los archivos que desea.
fuente
rm -r -ErrorAction:SilentlyContinue d:\destinationPath
antes de copiar para solucionarlo.Gracias a las respuestas anteriores. :)
Este script llamado "r4k4copy.cmd":
Acepta variables de "Origen", "Destino" y "Nombre de archivo". También puede copiar solo tipos específicos de archivos o nombres de archivos selectivos.
Cualquier mejora es bienvenida. :)
fuente
Solo con buscar y cp:
fuente
Similar a la solución de Paulius, pero los archivos que no le importan no se copian y luego se eliminan:
fuente
Para copiar todos los archivos de texto a G: y preservar la estructura del directorio:
fuente
Son solo dos comandos simples, pero no lo recomendaría, a menos que los archivos que NO necesita copiar sean pequeños. Esto se debe a que esto copiará TODOS los archivos y luego eliminará los archivos que no se necesitan en la copia.
Claro, el segundo comando es un poco largo, ¡pero funciona!
Además, este enfoque no requiere que descargue e instale ninguna herramienta de terceros (Windows 2000+ BATCH tiene suficientes comandos para esto).
fuente
En Linux y otros sistemas UNIX, usar el
tar
comando haría esto fácilmente.Entonces cwd al objetivo y:
Por supuesto, podría canalizar la salida del primer alquitrán al segundo, pero verlo funcionar en pasos es más fácil de entender y explicar. Me falta el cd / to / new / path / necesario en el siguiente comando; simplemente no recuerdo cómo hacerlo ahora. Alguien más puede agregarlo, con suerte.
Tar (gnutar) también está disponible en Windows, pero probablemente usaría el
xcopy
método yo mismo en esa plataforma.fuente
EDITAR: Si desea conservar las carpetas vacías (que, al releer su publicación, parece que lo hace) use / E en lugar de / S.
fuente
Usando la interfaz de línea de comandos de WinRAR, puede copiar los nombres de archivo y / o tipos de archivo a un archivo. Luego, puede extraer ese archivo a la ubicación que desee. Esto conserva la estructura del archivo original.
Necesitaba agregar archivos de imágenes de álbumes faltantes a mi teléfono móvil sin tener que volver a copiar la música. ¡Afortunadamente, la estructura del directorio era la misma en mi computadora y en mi móvil!
Solía:
Esto creó un archivo con todos los archivos Folder.jpg en los subdirectorios adecuados.
Esta técnica también se puede utilizar para copiar tipos de archivos. Si todos los archivos tienen nombres diferentes, puede optar por extraer todos los archivos en un solo directorio. Los parámetros adicionales de la línea de comandos pueden archivar varios tipos de archivos.
Más información en este enlace muy útil http://cects.com/using-the-winrar-command-line-tools-in-windows/
fuente
Para aquellos que usan Altap Salamander (administrador de archivos de 2 paneles): en las Opciones de la ventana emergente Copiar, simplemente especifique los nombres de archivo o máscaras. Fácil.
fuente
Estoy bien con las expresiones regulares, perezoso y reacio a las instalaciones, así que creé un archivo por lotes que crea el directorio y copia con comandos básicos de DOS. Parece laborioso pero más rápido para mí que trabajar con robocopias.
(.*)
reemplazar cadena"\1"
y haga clic en reemplazar todo(.*)
reemplace la cadenamd qqq\1\nxcopy \1 qqq\1\n
y haga clic en reemplazar todo\\([^\\^"]+)"\n
reemplazar\\"\n
A:\src
yB:\dest
). Desactive las expresiones regulares, busqueqqq"A:\src\
reemplazarB:\dest\
y haga clic en reemplazar todo.md creará directorios anidados. copy probablemente se comportaría de manera idéntica a xcopy en este ejemplo. Es posible que desee agregar / Y a xcopy para suprimir las confirmaciones de sobrescritura. Terminas con un archivo por lotes como este:
repetido para cada archivo en su lista original. Probado en Win7.
fuente
Para hacer esto con arrastrar y soltar, use winzip, hay una opción de conservación de estructura de directorio. Simplemente cree un nuevo .zip en el nivel del directorio que será su raíz y arrastre los archivos.
fuente