このエントリーをはてなブックマークに追加


隠しファイルも含めcp,mvする方法

ドット(.)からはじまる隠しファイルも含めてコピーするとき、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

隠しファイルも含めcp, mvする方法(正規表現を使う)

以下の例では、*にてファイルをすべて(隠しファイルを除く)と隠しファイルを指定し、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

shopt組み込みコマンドで対応

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 -s dotglob

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をする方法でした。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-12-15 (木) 16:21:45