Invocar comandos mercuriales para todos los directorios en un directorio dado


1

Digamos que tengo alrededor de 10 hg repositorios clonados en un directorio padre (llamémoslo "padre"). ¿Hay alguna forma de invocar un comando mercurial como hg statusen todos los subdirectorios en lugar de realizar el laborioso acto de cdingresar a cada directorio y luego invocar hg status?

Probé lo bueno, xargspero por alguna razón no funciona. Los comandos que utilicé son:

find . -maxdepth 1 -type d -print | xargs -t "hg status"

y

ls | xargs -t "hg status"

Actualización: la solución fue usar titulares de nombre explícitos al usar xargs. Algo como:

ls | xargs -t -I {} hg status {}

Eliminar las comillas.
Mikel

@Mikel: Todavía no funciona, no es que no lo haya probado ... :)
sasuke

Respuestas:


2
for dir in ./*/
do
  (cd $dir && hg status)
done

¿No será posible con una línea usando la xargscombinación? Si no, agradecería si pudiera explicar por qué mi único revestimiento no funciona. Gracias.
sasuke

2
La versión xargs no funciona porque termina dando los directorios como múltiples argumentos a un solo hgcomando; esta respuesta emite múltiples hgcomandos en diferentes directorios (¡oh, y usa puntos y comas en lugar de líneas nuevas y eso es una línea!)
Norman Gray

@ Norman: Gracias por la aclaración. Pero la pregunta nuevamente es, ¿por qué ls | xargs grep "something"funciona pero ls | xargs hg statusno funciona?
sasuke

1
@sasuke: grepacepta múltiples archivos como argumentos mientras hg statusque no.
Parches del

Pero entonces, ¿qué pasa ls | xargs -t -I {} mv {} {}.old? De todos modos, he encontrado la solución y es usar explícitamente marcadores de posición en xargs. Gracias por guiarme en el camino correcto, aceptaré tu respuesta ya que también hace lo que buscaba. :)
sasuke

1

Si hgpermite ejecutar en paralelo, puede usar GNU Parallel

parallel cd {} '&&' hg status ::: ./*/

Si no puede agregar -j1:

parallel -j1 cd {} '&&' hg status ::: ./*/

Mire el video de introducción para obtener más información: http://www.youtube.com/watch?v=OpaiGYxkSuQ

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.