以下に示すように、ディレクトリにいくつかのファイル、フォルダ、およびドットファイルがあります。
|-folder1
|----folder2
|----file.json
|----file2.php
|----.env
|----.dockerfile
|----.someconfig
|----.dockerignore
除外するmv $(ls | egrep -v '(.dockerfile|.env)') ../new_directory
ディレクトリ内のすべてのファイルを移動するコマンドを実行しましたが、実際にはすべてのドットファイルを移動することはできません。なぜですか?folder1
new_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
マッチドットファイルを許可します。