2010-01-21 34 views
11

¿Hay alguna manera de utilizar "install" para instalar varios archivos a la vez utilizando un patrón "comodín" (y aún tener "instalar" crear la jerarquía del directorio principal)?Linux "instalar" comando para la instalación comodín

He intentado varias maneras diferentes:

  • install -D -t /dest/path /source/path/*.py
  • install -D -t /dest/path/ /source/path/*.py
  • install -D /source/path/*.py /dest/path
  • install -D /source/path/*.py /dest/path/

por favor ayuda ... para cada ensayo que se necesita una gran cantidad de hora (estoy usando pbuilder para probar mi paquete cada vez).

Respuesta

7

¿Quizás use un simple externo para repetir la llamada de instalación? Entonces, ¿qué

for f in /source/path/*.py; do \ 
    install -D -t /dest/path $$f; \ 
done 

Dicho esto, siempre se puede tomar la lógica de su archivo Makefile, debian/rules, ... y probarlo independiente sin tener que ejecutar pbuilder.

Por supuesto, accesorios para usar pbuilder para proyectos internos!

+0

+1: Gracias. Por supuesto, podría usar su técnica, pero encontré una solución de trabajo repetida de prueba y error. Aclamaciones. – jldupont

+0

@Dirk: Aceptaré su respuesta aunque haya optado por una solución más directa de IMO. Pero bueno, hay muchas maneras de hacerlo. Aclamaciones. – jldupont

+0

Sí, tu respuesta es bastante buena también. ¿Realmente creas paquetes .deb? En ese caso, dh_installdirs es súper fácil; solo enumere qué directorios necesita y listo. Debhelper tiene muchas herramientas útiles. –

17

Utilice el siguiente para crear la jerarquía de directorios, antes de instalar:

install -d /dest/path 

y luego usar:

install -D /source/path/*.py /dest/path 

para "instalar" todos los archivos.

+0

¿No es el objetivo de la bandera '-D' crear los principales directorios principales de la ruta de destino? Si ya se crearon con una invocación 'install' anterior, entonces parece innecesario usarlo en el comando posterior. ¿Puedes justificar su uso o es seguro suponer que se puede eliminar en este caso? –

1

man install muestra que el DEST debe existir si se copian varios archivos.

... En las tres primeras formas, copie el origen al destino o de origen varias (s) en el directorio existente, mientras que el establecimiento de permisos y propietario/grupo. En la 4ª forma, crea todos los componentes del DIRECTORIO (s) dado. ...

+1

... gracias Ya leí el archivo "man" ... – jldupont

4

no sé nada acerca de pbuilder, pero para mi caso (PKGBUILD para Arch Linux) Estoy usando una fiesta de bucle con find:

for file in $(find source -type f -name *.py); do 
    install -m 644 -D ${file} dest/${file#source/} 
done 

El comando find puede ser adecuado para probar ser más o menos específico sobre lo que se copia. En el ejemplo anterior, se seleccionarán todos los archivos normales que terminan en .py en cualquier lugar debajo de la fuente /.

+0

Esta es la mejor manera de hacerlo si quiere tener el equivalente de 'cp -r ...' usando la instalación. Si solo desea copiar toda la estructura del directorio de origen (en lugar de solo obtener * .py), simplemente deje el '-name * .py'. –

0

Bueno, tal vez estoy reviviendo una publicación anterior, pero creo que vale la pena para futuras investigaciones. Del ejemplo dado por nharward (también uso arch Linux y PKGBUILD), lo modifiqué para no tener que preocuparme por el modo/permisos (-m) del archivo, independientemente de la estructura del directorio.

for file in $(find ${srcdir} -type f); do 
    install -m $(stat -c%a ${file}) -D ${file} ${pkgdir}/${file#${srcdir}} 
done 
Cuestiones relacionadas