Por lo tanto, puede usarlo *como comodín para todos los archivos cuando lo use cpdentro del contexto de un directorio. ¿Hay alguna manera de copiar todos los archivos excepto el xarchivo?
54
En bashpuedes usar extglob:
$ shopt -s extglob # to enable extglob
$ cp !(b*) new_dir/
donde !(b*)excluir todos los b*archivos.
Más tarde puede deshabilitar extglobcon
$ shopt -u extglob
findes la única manera detcsh:find . -maxdepth 1 ! -name "exclude*" -exec cp -t destination {} \+Rsync maneja esto muy bien.
Ejemplo copiar todo:
rsync -aP /folder1/* /folder/2Ejemplo 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 buena característica de rsync.fuente
-rPlugar de-aPsi desea recurrir.-aes para archivar. No estoy seguro si esto cambió o si es diferente en MacOS.rsynctiene la opción de hacerlo recursivo. Ejemplo:rsync --recursive -P --exclude=x /folder1/* /folder2/. (Probado solo en Ubuntu)Esta no es una característica de
cp, es una característica de su shell (se expande*para que signifique todos los archivos que no son puntos), por lo que la respuesta depende de qué shell esté usando. Por ejemplo,zshadmite esta sintaxis:Donde
^xsignifica "todos los archivos exceptox"También puede combinar patrones de selección y eliminación de selección, por ejemplo, para copiar todos los archivos wav excepto los que contienen xyz, puede usar:
fuente
bash?También se podría hacer en una capa de bourne antigua (portátil / compatible) de varias maneras con herramientas estándar de una manera mucho menos elegante que usando comandos avanzados de shell o comandos con opciones de exclusión incorporadas.
Si no hay demasiados archivos (y no con nombres que incluyen espacios y / o saltos de línea), esta podría ser una manera:
Claro,
bashy las herramientas GNU son geniales y poderosas, pero aún no siempre están disponibles. Si tiene la intención de ponerlo en un script portátil, lo recomendaríafindcomo en el comentario de Rush.fuente
Si desea copiar todo en una carpeta (incluidas las subcarpetas) a un subdirectorio particular:
Funciona con sh, bash, zsh (al menos).
fuente
cp -R * subdir/cp(no debash/sh), "cp: cannot copy a directory, ‘subdir’, into itself, ‘subdir/subdir’". Sin embargo, la copia se completa correctamente. Desafortunadamente, su variante se rompe con cualquier nombre de archivo que contenga un espacio o puntuación sensible al shell. Ver unix.stackexchange.com/q/128985/135943extglobEs la mejor manera hasta ahora, supongo.Otra forma es usar
cp $(ls --ignore=x) subdir/fuente
$etc.) Nunca analice la salida dels. unix.stackexchange.com/q/128985/135943