¿Cómo copiar algunos archivos, pero no todos?

¿Cómo copiar algunos archivos, pero no todos?

Por lo tanto, puede utilizar *como comodín para todos los archivos cuando los utilice cpdentro del contexto de un directorio. ¿Hay alguna manera de copiar todos los archivos excepto xel archivo?

Respuesta1

Rsync maneja esto muy bien.

Ejemplo copiar todo:rsync -aP /folder1/* /folder/2

Ejemplo copiar todo con exclusión:rsync -aP --exclude=x /folder1/* /folder2/

El -aPinterruptor:

  • a: Similar a cp -a, recursivo, etc.
  • P: Muestra el progreso, una característica interesante de rsync.

Respuesta2

En bashpuedes usar extglob:

 $ shopt -s extglob  # to enable extglob
 $ cp !(b*) new_dir/

donde !(b*)excluir todos b*los archivos.

Luego puedes desactivar extglobcon

 $ shopt -u extglob

Respuesta3

Esta no es una característica de cp, es una característica de su shell (se expande *para significar todos los archivos que no son puntos), por lo que la respuesta depende de qué shell esté usando. Por ejemplo, zshadmite esta sintaxis:

$ cp ^x /path/to/destination

Donde ^xsignifica "todos los archivos excepto x"

También puede combinar patrones de selección y anulación de selección, por ejemplo, para copiar todos los archivos wav excepto aquellos que contienen xyz, puede usar:

cp *.wav~*xyz*

Respuesta4

También se puede hacer en el antiguo shell Bourne (portátil/compatible) de varias maneras con herramientas estándar y de maneras mucho menos elegantes que usando el shell avanzado o comandos con opciones de exclusión integradas.

Si no hay demasiados archivos (y no con nombres que incluyan espacios y/o saltos de línea), esta podría ser una manera:

cp `ls | egrep -v '^excludename$'` destdir/.

Claro, bashy las herramientas GNU son geniales y poderosas, pero todavía no siempre están disponibles. Si tiene la intención de ponerlo en un script portátil, lo recomendaría findcomo en el comentario de Rush.

información relacionada