Utilizo la siguiente línea para encontrar todos los subdirectorios del PWD y ejecuto svnadmin verify
en cada directorio (ya sé que son repositorios de Subversion)
find ./* -maxdepth 0 -exec svnadmin verify {} \;
Esto funciona bien, aparte del hecho de que la salida se ve así:
* Verifying repository metadata ...
* Verifying metadata at revision 1 ...
* Verifying metadata at revision 2 ...
* Verifying metadata at revision 4 ...
* Verifying metadata at revision 5 ...
* Verifying metadata at revision 6 ...
* Verifying metadata at revision 9 ...
* Verifying metadata at revision 10 ...
* Verifying metadata at revision 12 ...
* Verifying metadata at revision 14 ...
* Verifying metadata at revision 15 ...
* Verifying metadata at revision 18 ...
* Verifying metadata at revision 20 ...
* Verifying metadata at revision 22 ...
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.
* Verified revision 3.
* Verified revision 4.
* Verified revision 5.
* Verified revision 6.
* Verified revision 7.
* Verified revision 8.
* Verified revision 9.
* Verified revision 10.
* Verified revision 11.
* Verified revision 12.
* Verified revision 13.
* Verified revision 14.
* Verified revision 15.
* Verified revision 16.
* Verified revision 17.
* Verified revision 18.
* Verified revision 19.
* Verified revision 20.
* Verified revision 21.
* Verified revision 22.
* Verified revision 23.
* Verified revision 0.
* Verifying repository metadata ...
* Verifying metadata at revision 4 ...
* Verifying metadata at revision 5 ...
* Verifying metadata at revision 6 ...
* Verifying metadata at revision 7 ...
* Verifying metadata at revision 9 ...
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.
* Verified revision 3.
* Verified revision 4.
* Verified revision 5.
* Verified revision 6.
* Verified revision 7.
* Verified revision 8.
* Verified revision 9.
Realmente me gustaría find
imprimir el nombre del archivo antes de ejecutar el svnadmin verify
comando, para facilitar el registro.
Traté de apretar un poco ls
allí, pero lo armé, ¿cómo debo hacer esto (preferiblemente simplemente)?
command-line
bash
scripts
find
Arronico
fuente
fuente
'%p'
a'%p\n'
para que el nombre preceda al resultado de verificación en su propia línea.-printf '%p\n'
con el más simple-print
find -name <a_name> -print -exec command {} \;
Si no desea recurrir, no tiene sentido usarlo
find
. Es mucho más simple hacerlo directamente en el shell:La
for d in */
encontrará todos los directorios (las*/
que asegura que sólo los directorios y archivos no se encuentran); elecho "$d"
imprimirá el nombre del directorio; Elsvnadmin verify "$d"
comprobará el directorio.Esto se puede ejecutar directamente desde la línea de comandos o desde un script sin cambio de formato.
fuente
find
. ¡Gracias por mejorar mi conocimiento!dotglob
yglobstar
en bash, lo que crea un guión ya más complicado. Tiendo a guardar globos para tareas grandes y complicadas, mientras quefind
la sintaxis es más fácil de unir sobre la marcha con solo unir un montón de filtros y comandos en una sola línea.find
simple. Siempre prefiero los globs,find
ya que no solo los encuentro mucho más simples, sino que también son más seguros cuando se trata de nombres de archivos arbitrarios que se pasan a otros programas.He agregado
-type d
si solo se trata de directorios.fuente
{}
, al menos ensvnadmin verify {}
-exec
genera un shell hijo, en el que se ejecutan los 2 comandos,;
como el final de la línea?Prueba esto:
Si solo quieres directorios (Gracias a @kos note):
fuente
for f in */
procesará solo directorios. -maxdepth 1
lugar de./*
, solo necesita el primer nivel en la estructura de carpetas-type d
, solo necesitas carpetas! -name "."
, no necesitas.
-exec
para iniciar un shellsh -c
para iniciar comandos dentro del shellSu comando
o más corto
-prune
si el archivo es un directorio, no descienda a élSu comando
fuente
-prune
parece interesante. Solía./* -maxdepth 0
evitar regresar.
del comando find. No causa ningún error crítico, pero prefiero no tener eso en mi salida.find
tiene banderas de opciones para imprimir, que ya se mencionan en otras respuestas. Si observamos el problema desde la perspectiva de ejecutar múltiples comandos para el mismo archivo procesado actualmente,find
permite usar múltiples-exec
declaraciones. Esto significa que podríamos optar por usar:Una vez más, nota que este enfoque es aplicable no sólo a la impresión con
echo
,printf
u otros servicios públicos, sino también a otros comandos.fuente
Puede ser útil canalizar la
find
salida alread
bucle:Le permite ejecutar una secuencia de comandos compuesta más complicada con nombres de archivo devueltos por
find
, como en este elegantels
ejemplo:fuente
Esto imprimirá el nombre y el contenido de los archivos solo de forma recursiva.
fuente