copiar archivos SVN modificados solo a otro directorio

Tengo una lista de archivos en mi copia de trabajo actual que se han modificado localmente. Hay alrededor de 50 archivos que han sido cambiados.

Puedo obtener una lista de estos archivos haciendo esto:

svn st | ack '^M'

¿Hay alguna manera de que pueda copiar estos archivos y , solamente estos archivos a otro directorio, que se llama backup?

preguntado el 03 de mayo de 12 a las 15:05

edite su publicación para mostrar una pequeña muestra de la salida producida por su tubería svn. Entonces podemos ayudar fácilmente. Es probable que puedas hacerlo como una sola línea. Buena suerte. -

5 Respuestas

Asumiendo que ack es como grep... podrías hacer algo como:

cp `svn calle | acuse de recibo '^M' | cortar -b 8-` copia de seguridad

Publicaría esto como un comentario... pero no sé cómo escapar de los acentos graves en los comentarios...

contestado el 03 de mayo de 12 a las 15:05

¿Es posible hacer esto y mantener los directorios en los que están los archivos? Por ejemplo, si un archivo modificado está en /images entonces puedo crear/copiar un /images carpeta al copiar los archivos a la /backup ¿directorio? - crmpicco

Por alguna razón en Mac, el comando anterior no funcionó. Usé el siguiente estado svn | grep '^[ADMR]' | cortar -b 8- | xargs -I '{}' cp {} /directorio/ - Abhijit Gaikwad

@forsvarir: los backticks (al menos en bash) pueden intercambiarse por construcciones $() (que por cierto permiten expresiones anidadas). Resolví el problema de "mantener los directorios": for i in $(svn st|grep ^[MA]|cut -b 8-); do x="b/$(dirname $i)";mkdir -p $x;cp "$i" "$x";done. Espero que esto ayude. - Joerg Reinhardt

Utilizo el increíble script bash de @JoergReinhardt para incluir archivos/directorios no programados en la copia de seguridad y evitar problemas con directorios anidados, modifiqué el script: for i in $(svn st|grep ^[MA?]|cut -b 8-); do x="../_svnexport/$(dirname $i)";mkdir -p $x;cp -ir "$i" "$x";done. svn st|grep ^[MA?]|cut -b 8-: Obtenga la ruta de directorios/archivos modificados, agregados y no programados. mkdir-p: Cree directorios principales si no está disponible. cp-ir "$i": Copie archivos/directorios recursivamente y pregunte qué hacer si existe un archivo/directorio. - malisokan

svn status | grep '^[ADMR]' | cut -b 8- | xargs -I '{}' rsync -R  {} /directry/

respondido 19 mar '13, 19:03

Acabo de probar esto, pero no mantiene los directorios en los que se encuentran los archivos. Entonces, si tiene un /inc/picco.txt, entonces no crea el inc/. - crmpicco

rsync -R debe conservar la estructura del directorio. He actualizado el script. por favor, hágamelo saber si esto está funcionando para usted. - Abhijit Gaikwad

Esto haría (bash):

#!/bin/bash
set -eu

# for each modified file
for f in $(svn st| awk '/^M/{print $2}'); do
    # create a directory under backup root and copy the file there
    mkdir -p .../backup/${f%/*} && cp -a $f .../backup/$f
done

contestado el 03 de mayo de 12 a las 17:05

Recibo este error cuando ejecuto ese código. Disculpas, no estoy familiarizado con bash scripting. copy_modified_files.sh: line 5: unexpected EOF while looking for matching )' - crmpicco

@crmpicco: faltaban paréntesis antes de '; hacer' - bobah

En Windows 8, puede usar este comando en el directorio svn actual:

(FOR /F "tokens=2 delims== " %i IN ('svn st ^| findstr "^[ADMR]"') DO @echo %i & echo f| xcopy /f /y %i c:\projects\backup\%i)

Respondido 02 ago 13, 10:08

intenté ejecutar esto pero tiene algún error con los directorios: Dmitriy

Funciona para mi:

svn status | grep ^M | awk '{print $2}' | xargs -I '{}' cp --parents {} /backup/

Respondido el 22 de enero de 18 a las 11:01

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