A menudo quiero hacer alguna variante de este idioma:
$ mkdir 2010
$ svn mv * 2010
Por supuesto, recibo un error porque el globo también coincide con 2010:
svn: Cannot copy path '2010' into its own child '2010/2010'
¿Hay alguna forma de reemplazarlo "svn mv * 2010"con un trazador de líneas diferente que haga lo correcto?

mv. Sin embargo, conmv,mv * newdirfunciona para mí, aunque con un error.Respuestas:
Bajo ksh, bash o zsh:
En bash, debes ejecutar
shopt -s extglobprimero (ponlo en tu~/.bashrc). En zsh, debe ejecutarsetopt -o ksh_globprimero (ponerlo en su~/.zshrc).Esto no mueve archivos de puntos (archivos cuyo nombre comienza con
.). Si tiene algunos, muévalos por separado. Tenga cuidado de excluir el.svndirectorio si tiene uno. En ksh o zsh:En bash, esto es más complicado porque también debes excluir explícitamente
.y...Zsh también tiene una sintaxis diferente y más corta, que requiere ejecutarse
setopt -o extended_globprimero (nuevamente, ponga esto~/.zshrc)La primera expansión de llaves entra en juego, lo que resulta en
svn mv ^2010 2010. Luego se expande el patrón^2010(un acceso directo para "archivos que coinciden*pero no2010").Si tiene un
.svndirectorio, deberá excluirlo del movimiento. Esto está bien por defecto, ya.svnque no coincide*(es un archivo de puntos). Sin embargo, hay complicaciones:Si ha configurado la
glob_dotsopción, deberá excluir.svntambién:Si tiene archivos de puntos y no los ha configurado
glob_dots, deberá moverlos por separado:Para hacerlo de una vez:
Otra forma que funcionaría en zsh en este caso (si no tiene subdirectorios) es
svn mv *(.D) 2010hacer coincidir solo los archivos normales (.), incluidos los archivos de puntos (D).fuente
ZSH tiene un operador de pegote útiles para que coincida con todo, excepto un nombre dado,
^. Entonces esto funcionaría (pero es específico de ZSH, ysetopt extendedglobprimero debe hacerlo ):fuente
!()sintaxis con la que funcionazsh. ¿Cómo^difiere la sintaxis? No funciona en mi shell, ¿qué opción necesitaría configurar para habilitarlo?setopt extendedglob. No lo sabía!(), suena como una forma más cruzada de hacerlosvn mv {^,}2010para evitar escribir el nombre del directorio dos vecesSi sus archivos tienen nombres "domesticados" (sin espacios en blanco, caracteres no imprimibles o
\[?*):fuente