ドット(.)からはじまる隠しファイルも含めてコピーするとき、cp * や mv * では、
隠しファイルが対象になりません。
以下に隠しファイルを含めた mv および cp の実行例を以下に記します。
以下のコマンドでディレクトリおよびファイルを作成します。
mkdir src dst touch src/a.txt src/b.txt src/.conf
実行例
sakura@hpmini:~$ touch src/a.txt src/b.txt src/.conf sakura@hpmini:~$ ls -al src/ 合計 8 drwxrwxr-x 2 sakura sakura 4096 12月 14 19:54 . drwxr-xr-x 44 sakura sakura 4096 12月 14 19:54 .. -rw-rw-r-- 1 sakura sakura 0 12月 14 19:54 .conf -rw-rw-r-- 1 sakura sakura 0 12月 14 19:54 a.txt -rw-rw-r-- 1 sakura sakura 0 12月 14 19:54 b.txt
以下の例では、*にてファイルをすべて(隠しファイルを除く)と隠しファイルを指定し、srcからdstにmvしてみます。
以下のlsで隠しファイルのみ表示することができます。
$ cd src $ ls .[^\.]* .conf
なので、
mv * .[^\.]* ../dst
でsrcディレクトリからdstディレクトリに移動することができます。
実行例
sakura@hpmini:~/src$ mv * .[^\.]* ../dst/ sakura@hpmini:~/src$ ls -al 合計 8 drwxrwxr-x 2 sakura sakura 4096 12月 14 20:03 . drwxr-xr-x 44 sakura sakura 4096 12月 14 19:54 .. sakura@hpmini:~/src$ ls -a ../dst/ . .. .conf a.txt b.txt
cpも同じように記述できます。
sakura@hpmini:~$ cd sakura@hpmini:~$ ls -a src/ dst/ dst/: . .. .conf a.txt b.txt src/: . .. sakura@hpmini:~$ cp dst/* dst/.[^.]* src/ sakura@hpmini:~$ ls -a src/ dst/ dst/: . .. .conf a.txt b.txt src/: . .. .conf a.txt b.txt
cp, mvで*を指定すると隠しファイルはデフォルトでは対象になりません。
しかし、以下のコマンドで隠しファイルも対象にすることができます。
上記の手順をしてディレクトリおよびファイルがある場合はrmし、再度ファイルを作ってください。
sakura@hpmini:~$ cd sakura@hpmini:~$ rm -fr src/ dst/ sakura@hpmini:~$ mkdir src dst sakura@hpmini:~$ touch src/a.txt src/b.txt src/.conf sakura@hpmini:~$ ls -a src/ dst/ dst/: . .. src/: . .. .conf a.txt b.txt
ちなみにデフォルトだと以下のようになります。
隠しファイルが対象になっていないことが確認できます。
sakura@hpmini:~$ ls -a src/ . .. .conf a.txt b.txt sakura@hpmini:~$ cp src/* dst/. sakura@hpmini:~$ ls -a src/ dst/ dst/: . .. a.txt b.txt src/: . .. .conf a.txt b.txt
shoptのdotglobをonにすると、cp, mvで隠しファイルが対象となります。
デフォルトではoffになっています。
sakura@hpmini:~$ shopt | grep dotglob dotglob off sakura@hpmini:~$
以下のコマンドで、dotglobをonにすることができます。
shopt -s dotglob
以下、実行例です。
sakura@hpmini:~$ shopt -s dotglob sakura@hpmini:~$ shopt | grep dotglob dotglob on
隠しファイルもcpされているのが確認できます。
sakura@hpmini:~$ ls -a src/ dst/ dst/: . .. src/: . .. .conf a.txt b.txt sakura@hpmini:~$ cp src/* dst/. sakura@hpmini:~$ ls -a dst/ . .. .conf a.txt b.txt
したがって、shopt -s dotglob を.bashrcなどに記述しておけば毎回設定する必要がなくなります。
ちなみに、offに戻したい場合は、以下のように -u オプションを使用します。
shopt -u dotglob
但し、注意点があります。
dotglobをonにすると隠しファイルがcp,mvの対象となります。
また、rmも対象となるので、設定ファイルなども消えてしまうので注意してください。
以上、隠しファイルも含めcpやmvをする方法でした。