Мой фаворит - когда я создавал новую систему Соляриса для установки базы данных Oracle. Все существовало включая высокого оцененного консультанта оракула прямо в середине работы оптимизации DB, которую он делал. Я был в серверной, проверяющей другой сервер, когда я споткнулся за шнур питания к серверу.
Под ksh, ударом или zsh:
svn mv !(2010) 2010
Под ударом необходимо работать shopt -s extglob
сначала (вставляет его Ваш ~/.bashrc
). Под zsh необходимо работать setopt -o ksh_glob
сначала (вставляет его Ваш ~/.zshrc
).
Это не перемещает точечные файлы (файлы, имя которых начинается .
). Если у Вас есть некоторые, переместите их отдельно. Заботьтесь для исключения .svn
каталог, если у Вас есть тот. В ksh или zsh:
svn mv !(2010) .!(svn) 2010
В ударе это более сложно, потому что также необходимо явно исключить .
и ..
.
svn mv !(2010) .!(svn|.|) 2010
Zsh также имеет другой, более короткий синтаксис, который требует выполнения setopt -o extended_glob
сначала (снова, вставляет это ~/.zshrc
):
svn mv {^,}2010
Первое расширение фигурной скобки играет роль, приводя к svn mv ^2010 2010
. Затем шаблон ^2010
(ярлык для “соответствия файлов *
но нет 2010
”), расширен.
Если у Вас есть a .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
).
ZSH имеет полезный оператор шарика для соответствия всему кроме имени, ^
. Таким образом, это работало бы (но это ZSH конкретный, и Вы должны setopt extendedglob
сначала):
$ svn mv ^2010 2010
!()
синтаксис, который работает с zsh
. Как делает ^
синтаксис отличается? Это не работает в моей оболочке, какую опцию я должен был бы установить для включения его?
– Caleb
28.05.2011, 12:45
setopt extendedglob
. Я не знал о !()
, это походит на большее количество перекрестной оболочки способ сделать это
– Michael Mrozek♦
28.05.2011, 21:42
svn mv {^,}2010
чтобы не вводить имя каталога дважды А-ч
– Gilles 'SO- stop being evil'
06.02.2013, 21:07
Если Ваши файлы имеют “ручные” имена (никакой пробел, непечатные символы или \[?*
):
svn mv $(ls | grep -vx 2010) 2010