Под ksh, bash или zsh:
svn mv !(2010) 2010
Под Bash, вам нужно запустить в shopt -s extglob
первую очередь (положить его в свой ~/.bashrc
). Под zsh вам нужно setopt -o ksh_glob
сначала запустить (поместите в свой ~/.zshrc
).
Это не перемещает точечные файлы (файлы, чье имя начинается с .
). Если у вас есть, переместите их отдельно. Будьте осторожны, чтобы исключить .svn
каталог, если он у вас есть. В кш или зш:
svn mv !(2010) .!(svn) 2010
В bash это сложнее, потому что вам также нужно явно исключить .
и ..
.
svn mv !(2010) .!(svn|.|) 2010
У Zsh также есть другой, более короткий синтаксис, который требует запуска setopt -o extended_glob
первым (опять же, вставьте это в ~/.zshrc
):
svn mv {^,}2010
Первое расширение скобки вступает в игру, в результате чего svn mv ^2010 2010
. Затем шаблон ^2010
(ярлык «файлы совпадают, *
но не 2010
») расширяется.
Если у вас есть .svn
каталог, вам нужно исключить его из переезда. Это нормально по умолчанию, поскольку .svn
не соответствует *
(это точечный файл). Однако есть осложнения:
Если вы установили glob_dots
опцию, вам также необходимо исключить .svn
:
svn mv !(2010|.svn) 2010 # requires setopt ksh_glob
svn mv *~(.svn|2010) 2010 # requires setopt extended_glob
Если у вас есть точечные файлы, но вы не установили их glob_dots
, вам нужно переместить их отдельно:
svn mv {^,}2010
svn mv .*~.svn 2010
Чтобы сделать это за один раз:
svn mv *~(.svn|2010)(D) 2010
Другой способ, который будет работать в zsh в этом случае (если у вас нет подкаталогов), - svn mv *(.D) 2010
это сопоставление только обычных файлов ( .
), включая точечные файлы ( D
).
mv
. Тем не менее, сmv
,mv * newdir
у меня работает, правда , с ошибкой.