La extglobopción de shell le ofrece una coincidencia de patrones más potente en la línea de comandos.
Lo enciendes shopt -s extgloby lo apagas con shopt -u extglob.
En su ejemplo, inicialmente haría:
$ shopt -s extglob
$ cp !(*Music*) /target_directory
La disposición completa ext terminó glob operadores de Bing son (extracto de man bash):
Si la opción de shell extglob está habilitada usando el shopt incorporado, se reconocen varios operadores de coincidencia de patrones extendidos. Una lista de patrones es una lista de uno o más patrones separados por |. Los patrones compuestos se pueden formar utilizando uno o más de los siguientes subpatrones:
- ? (lista de patrones)
Coincide con cero o una ocurrencia de los patrones dados
- * (lista de patrones)
Coincide con cero o más ocurrencias de los patrones dados
- + (lista de patrones)
Coincide con una o más apariciones de los patrones dados
- @ (lista de patrones)
Coincide con uno de los patrones dados
- ! (lista de patrones)
Coincide con cualquier cosa excepto uno de los patrones dados
Entonces, por ejemplo, si quisiera enumerar todos los archivos en el directorio actual que no son .co .harchivos, haría:
$ ls -d !(*@(.c|.h))
Por supuesto, el gloging de shell normal funciona, por lo que el último ejemplo también podría escribirse como:
$ ls -d !(*.[ch])
ls /dir/*/!(base*)