ルートディレクトリのドットファイルを移動できないのはなぜですか?

ルートディレクトリのドットファイルを移動できないのはなぜですか?

以下に示すように、ディレクトリにいくつかのファイル、フォルダ、およびドットファイルがあります。

|-folder1
|----folder2
|----file.json
|----file2.php
|----.env
|----.dockerfile
|----.someconfig
|----.dockerignore

除外するmv $(ls | egrep -v '(.dockerfile|.env)') ../new_directoryディレクトリ内のすべてのファイルを移動するコマンドを実行しましたが、実際にはすべてのドットファイルを移動することはできません。なぜですか?folder1new_directory.dockerfile.env

ベストアンサー1

走れば

ls | egrep -v '(.dockerfile|.env)'

それ自体で、ここで何が起こっているのか理解するでしょう。出力は次のとおりです。

file2.php
file.json
folder2

これはls、デフォルトではドットファイルがリストされていないために発生します。ドットファイルを含めたり.含めたりしたくない場合は、..次のようにしますls -A

$ ls -A | egrep -v '(.dockerfile|.env)'
.dockerignore
file2.php
file.json
folder2
.someconfig

lsここでは使用する必要はありません。あなたはしないでください)、Bash拡張を使用することができますパターンマッチング:

shopt -s extglob dotglob
mv !(.dockerfile|.env|.|..) ../new_directory

これはすべてのファイルと一致します。いいえ.dockerfile、またはと.env命名されました。この方法では、スペース、改行などを含むファイル名に問題は発生しません。...

shopt -s extglob拡張パターンマッチングを有効にし、グローバルshopt -s dotglobマッチドットファイルを許可します。

おすすめ記事