¿Cuál es la forma correcta de copiar archivos mientras se conserva la estructura de carpetas en powershell?

Parece que nunca puedo hacer esto bien.

tengo una carpeta existente c:\MyApps\Websites\MySite que ya tiene un sitio web existente ejecutándose en él. He descargado los bits más recientes que se encuentran en c:\temp\MySite\artifacts.

cuando trato de ejecutar esto

$source "c:\temp\MySite"
$destination "c:\MyApps\Websites\MySite"
copy-item $source $destination -recurse -force

if c:\MyApps\Websites\MySite ya existe entonces intenta ponerlo en c:\MyApps\Websites\MySite\artifacts, pero si aún no existe, lo copia correctamente. No estoy seguro de lo que está pasando aquí. ¿Alguna sugerencia?

preguntado el 27 de julio de 12 a las 21:07

1 Respuestas

Solo usa el robocopy dominio. Es diseñado para este tipo de cosas.

robocopy $source $destination /E

Se envía con Windows 7, por lo que es un comando interno, por lo que sigue siendo una forma de 'Powershell', en mi humilde opinión, pero si desea usar el comando copiar, entonces está muy cerca, pero su implementación actual toma el source carpeta y lo pone dentro target (es decir, el resultado sería C:\target\source\filesno, C:\target\files). Cuando quieras hacer el interior de target parecerse al interior de source, necesitas hacer:

cp C:\source\* C:\target -r -fo

Note la *, esto agarra el contenido de los source carpeta. Si quieres target para ser borrado primero, solo hazlo rm -r -fo C:\target\* antes de la copia.

Powershell no maneja rutas largas, por lo que deberá usar robocopy de todos modos si tiene un nombre de archivo largo o carpetas profundas.

Respondido 27 Jul 12, 22:07

Esto no sincroniza las carpetas, ¿verdad? En otras palabras, si los archivos existen en el directorio de destino pero no en el directorio de origen, ¿los eliminará? - Miqueas

@Micah Para eliminar cosas en el destino que NO están en el origen, debe emitir el /PURGE bandera. También, /MIR es equivalente a /E /PURGE. Puede ver más información emitiendo robocopy /? - OrtografíaD

¡Santa mierda Robocopy! Donde has estado toda mi vida. Estoy votando a favor de la respuesta porque es increíble, pero aún me gustaría saber cómo hacerlo de la manera PowerShell ... - Miqueas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.