私はしばしばこの慣用語のいくつかのバリエーションを考えています。
$ mkdir 2010
$ svn mv * 2010
もちろん、globも2010と一致するため、エラーが発生します。
svn: Cannot copy path '2010' into its own child '2010/2010'
"svn mv * 2010"
正しいことができる他のモノライナーと交換する方法はありますか?
ベストアンサー1
ksh、bashまたはzshから:
svn mv !(2010) 2010
shopt -s extglob
Bashでは、まず実行(に入れる必要があります)する必要があります~/.bashrc
。 zshでは、最初にsetopt -o ksh_glob
実行(に入れる必要があります)する必要があります~/.zshrc
。
ドットファイル(名前で始まるファイル)は移動しません.
。ある場合は別途移動してください。.svn
ディレクトリがある場合は除外するように注意してください。 kshまたはzshから:
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で作業するもう1つの方法は、ドットファイル()を含む通常のファイルsvn mv *(.D) 2010
()のみを一致させることです。.
D