*がドットファイルと一致するかどうかを制御するためのbashのglobbing設定は何ですか?

*がドットファイルと一致するかどうかを制御するためのbashのglobbing設定は何ですか?

mv ./* ../somedirectory 私は最近似たようなことをしましたが、似たようなファイルが移動されないのを見て.gitignore驚きました。

私の仕事のほとんどはOS Xのzshで行われました。 OS Xでbashを試しましたが、同じ動作を見つけました。*ドットファイルと一致しません。これは私にとって非常に望ましくないようですが、明らかにこれはbashのデフォルトです。 (私が知っている限り、これはzshのデフォルト値かもしれませんが、数年前に.zshrcで変更して動作が異なることを忘れてしまったかもしれません。)

期待どおりに動作するように bash を設定するにはどうすればよいですか? for * はドットファイルを無視せずにすべてのファイルと一致します。

これがまったく明確でない場合、再現方法は次のとおりです。

cd /tmp
mkdir {t,d}est
touch test/{.,}{1,2,3,4,5,6,7}
ls -hal test
mv test/* dest
ls -hal test     # notice dot files are still there
ls -hal dest     # notice only some files were mv'ed

ベストアンサー1

吹く

すでに知っているように、bashは.名前の先頭のaまたはスラッシュと一致しません。問題の点の一致を変更するには、次のオプションを設定する必要がありますdotglob男乱交:

dotglobを設定すると、bashには「.」で始まるファイル名が含まれます。
    パス名拡張の結果です。

bashを使用して有効/設定するには、shopt次の手順を実行します。

shopt -s dotglob


zshの場合は、このオプションを使用することもできますが、次のように有効にする必要がありdotglobます。setopt

setopt dotglob

おすすめ記事