Sotto ksh, bash o zsh:
svn mv !(2010) 2010
Sotto bash, devi shopt -s extglob
prima correre (mettilo nel tuo ~/.bashrc
). Sotto zsh, devi setopt -o ksh_glob
prima eseguirlo (mettilo nel tuo ~/.zshrc
).
Questo non sposta i file di punti (file il cui nome inizia con .
). Se ne hai alcuni, spostali separatamente. Fai attenzione a escludere la .svn
directory se ne hai una. In ksh o zsh:
svn mv !(2010) .!(svn) 2010
In bash, questo è più complicato perché è necessario anche escludere esplicitamente .
e ..
.
svn mv !(2010) .!(svn|.|) 2010
Zsh ha anche una sintassi diversa, più breve, che richiede l'esecuzione setopt -o extended_glob
prima (di nuovo, inseriscilo ~/.zshrc
):
svn mv {^,}2010
Entra in gioco l'espansione della prima parentesi, risultante svn mv ^2010 2010
. Quindi il modello ^2010
(un collegamento per "corrispondenza dei file *
ma non 2010
") viene espanso.
Se hai una .svn
directory, dovrai escluderla dalla mossa. Questo è ok per impostazione predefinita, in quanto .svn
non corrisponde *
(è un file punto). Tuttavia, ci sono complicazioni:
Se hai impostato l' glob_dots
opzione, dovrai anche escludere .svn
:
svn mv !(2010|.svn) 2010 # requires setopt ksh_glob
svn mv *~(.svn|2010) 2010 # requires setopt extended_glob
Se hai file dot e non li hai impostati glob_dots
, dovrai spostarli separatamente:
svn mv {^,}2010
svn mv .*~.svn 2010
Per farlo in una volta sola:
svn mv *~(.svn|2010)(D) 2010
Un altro modo che funzionerebbe in zsh in questo caso (se non hai sottodirectory) è svn mv *(.D) 2010
quello di abbinare solo i file regolari ( .
) inclusi i file punto ( D
).
mv
. Tuttavia, conmv
,mv * newdir
funziona per me, anche se con un errore.