2011-01-12 21 views

Respuesta

13

Una variación en respuesta Konrad, utilizando cp opción -t para especificar el directorio de destino simplifica el último comando. Crea un único proceso cp para copiar todos los archivos.

ls src_folder | grep -v '^String' | xargs cp -t dest_folder 
    lista de todos los archivos de
  • src_folder
  • filtrar todos los que empiezan con String
  • copia todos los archivos restantes a dest_dir
3
ls src_folder | grep -v '^String' | xargs -J % -n1 cp % dest_folder 

Esta lista

  • todos los archivos de src_folder
  • filtrar todos los que empiezan con String (de modo que el resto permanece)
  • invocar el comando cp
    • vez para cada uno de esos archivos (-n1 dice llamar al cp para cada uno de por separado)
    • utilizando, como sus argumentos, % dest_folder, donde % se reemplaza por el nombre del archivo real.
+0

My 'xargs' (Debian Testing) no tiene la opción' -J'. ¿Querías decir '-I'? – maxelost

+1

@maxelost: Estoy usando la versión BSD de OS X. La opción '-I' hace algo más. Apesta que todas las distribuciones tengan diferentes interruptores en sus herramientas POSIX. :-(Mucho para la estandarización –

1
cp src_folder/!(String*) dest_folder 

try que ~ Chris

+0

Aparece un mensaje de error: error de sintaxis cerca del token inesperado '(' – mstaniloiu

+0

Por alguna razón que uno funciona para mí. Pruebe el comando que publicó Ignacio (Ajustado en mi respuesta anterior - usted no no es necesario el shopt -s extglob) – TyrantWave

5

En bash:

shopt -s extglob 
cp src_folder/!(String*) dest_folder 
+0

@Joel: habilita el globbing extendido en bash. –

Cuestiones relacionadas