uuutee.log

shellでワイルドカードを指定した際にドットファイルを含めて処理したい

問題

rm *, mv *, find -name "*" などのワイルドカード指定は . で始まるファイル を対象にできない。
たとえば .htaccess が含まれるディレクトリで rm -rf * しても .htaccess は残ってしまう。

1. shopt を使う

shopt で bash のオプションを変更できる。

ドットファイルも含める設定に変更

# 設定変更
shopt -s dotglob

# ドットファイルも含めて移動できるようになる
mv *

設定を解除する

shopt -u dotglob

設定を確認する

shopt -p

2. .??*で指定する

.??* と指定すると . ファイルを対象にできる

find . -name ".??*" -type f -maxdepth 1
.htaccess

結論

スクリプトで使うなら 1 の方法で 先頭で dotblog 設定、終了時に dotglob 解除するのがよさそう。
マニュアルで作業する場合は、ドットファイル以外を処理したあとに、2 の方法でドットファイルだけ処理するのがよい。

参考