【Bash】ディレクトリの移動

TL;DR

うまいこと言おうとして適当に肉付けしたら記事全体が破綻してたので、結論からぶっちゃけると、 サブシェルとか使うとなんかプロっぽく見えてちょっといいねと思っただけです。

( shopt -s dotglob; mv /tmp/wordpress/* ${dest_dir}/public_html; )

前提

  • プレーンなCentOS
  • プレーンなBash

NG

下記の挙動が要求・許容される場合はほぼないだろう

  • ${dest_dir}/public_html が存在する場合: wordpressディレクトリがhtmlディレクトリとして移動
  • そうでない場合: ${dest_dir}/public_html/wordpress として移動される
mv /tmp/wordpress ${dest_dir}/public_html

NG?

だいたい大丈夫だけど、移動元にドットファイルが含まれる場合はNG。 Bashのグロブはデフォルトだとドットファイルにマッチしないのです。

mkdir -p ${dest_dir}/public_html
mv /tmp/wordpress/* ${dest_dir}/public_html
$ shopt | grep dotglob
dotglob         off
$ echo * | egrep -o "\..*"
(からっぽ)
$ shopt -s dotglob

$ echo * | egrep -o "\..*"
.bash_history .bash_profile .ssh ...

OK

Bashのオプションを変えて、グロブがドットファイルにマッチするようにしまそ。

shopt -s dotglob

mkdir -p ${dest_dir}/public_html
mv /tmp/wordpress/* ${dest_dir}/public_html

シェルスクリプト内でちょろっと仕込みたいが予期せぬ副作用が怖い場合は、サブシェルでやればいいんでは?

( shopt -s dotglob; mv /tmp/wordpress/* ${dest_dir}/public_html; )