Cuando corro svn st | awk '{print $2}', obtengo:
a.py
b.py
c.py
Entonces quiero scpestos archivos a un servidor remoto. Yo he tratado:
svn st | awk '{print $2}' | xargs scp my_name@my_server:~/
Pero no funciona. ¿Cuál es el comando correcto para hacer esto?
¡Gracias!

svn st | awk '{print $2}' | xargs -J % scp % my_name@my_server:~/que debería haber leído la página del manual dexargsantes de pedir;)-Izno-iz-izen Solaris, y siempre funciona. Gracias por la anotación.-I. La página de manual de AIX (6.1) dice que-iestá obsoleta y que-Idebe usarse. Solaris 10 (y 9) tiene ambos-iy-I.-idesde Solaris 2.5. envejecer es un asunto triste, mis amigos. :)La razón por la que esto no funciona es porque le estás diciendo
xargsque corrasEl orden de los argumentos no corresponde a lo que quieres hacer. Una solución es forzar que los nombres de los archivos aparezcan antes del destino en la línea de comando. Esto requiere GNU xargs (es decir, Linux o Cygwin). Mientras estamos en eso, podemos pasar
-d '\n'para asegurarnos de que cualquier nombre de archivo que no contenga nuevas líneas funcionará (sin-d, xargs espera alguna cita extraña de su entrada); esto no es necesario si trabaja con árboles de fuentes de software típicos, en los que los nombres de los archivos tienden a ser muy mansos.Una desventaja de este método es que
scpse llama por separado para cada archivo. Si está copiando muchos archivos pequeños, eso puede marcar una diferencia significativa, ya que una conexión SSH tarda un poco en establecerse. Puede acortar en gran medida el tiempo por conexión mediante el uso de una conexión maestra SSH (que está fuera del alcance de esta respuesta, consulte el manual, especialmente las opcionesControlMastery ).ControlPath.ssh/configUna forma de forzar a los argumentos a estar en el lugar correcto es pasar por un caparazón intermedio. Esta es una técnica general para reordenar argumentos cuando se usa
xargsofind … -exec.Otra posibilidad es usar en
rsynclugar descp. Puede pasarrsyncuna lista de nombres de archivo en la entrada estándar. Dado quersyncespera una lista de patrones y no una lista de nombres de archivos, esto requiere que los nombres de sus archivos no contengan caracteres comodín (específicamente, no hay líneas nuevas, no\[*?y no iniciales#o;).fuente