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 * newdir
funciona para mí, aunque con un error.Respuestas:
Bajo ksh, bash o zsh:
En bash, debes ejecutar
shopt -s extglob
primero (ponlo en tu~/.bashrc
). En zsh, debe ejecutarsetopt -o ksh_glob
primero (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.svn
directorio 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_glob
primero (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
.svn
directorio, deberá excluirlo del movimiento. Esto está bien por defecto, ya.svn
que no coincide*
(es un archivo de puntos). Sin embargo, hay complicaciones:Si ha configurado la
glob_dots
opción, deberá excluir.svn
tambié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) 2010
hacer 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 extendedglob
primero 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 {^,}2010
para evitar escribir el nombre del directorio dos vecesSi sus archivos tienen nombres "domesticados" (sin espacios en blanco, caracteres no imprimibles o
\[?*
):fuente