シンボリックリンクのコピーをします。
まずは、適当にファイルを作成。
takk@deb83:~$ for i in {1..5};do banner $i>$i;done takk@deb83:~$ head * | pr -t5 ==> 1 <== ==> 2 <== ==> 3 <== ==> 4 <== ==> 5 <== # ##### ##### # ####### ## # # # # # # # # # # # # # # # ##### ##### ####### ##### # # # # # # # # # # # # ##### ####### ##### # ##### takk@deb83:~$
これらのファイルのシンボリックリンクを作成します。
takk@deb83:~$ for i in *;do ln -s $i s_$i;done takk@deb83:~$ ls -l 合計 20 -rw-r--r-- 1 takk takk 38 11月 23 23:43 1 -rw-r--r-- 1 takk takk 43 11月 23 23:43 2 -rw-r--r-- 1 takk takk 54 11月 23 23:43 3 -rw-r--r-- 1 takk takk 46 11月 23 23:43 4 -rw-r--r-- 1 takk takk 43 11月 23 23:43 5 lrwxrwxrwx 1 takk takk 1 11月 23 23:53 s_1 -> 1 lrwxrwxrwx 1 takk takk 1 11月 23 23:53 s_2 -> 2 lrwxrwxrwx 1 takk takk 1 11月 23 23:53 s_3 -> 3 lrwxrwxrwx 1 takk takk 1 11月 23 23:53 s_4 -> 4 lrwxrwxrwx 1 takk takk 1 11月 23 23:53 s_5 -> 5 takk@deb83:~$
シンボリックリンクなので、当然TARGETと同じ内容です。
takk@deb83:~$ head s* | pr -t5 ==> s_41 <== ==> s_42 <== ==> s_43 <== ==> s_44 <== ==> s_45 <== # ##### ##### # ####### ## # # # # # # # # # # # # # # # ##### ##### ####### ##### # # # # # # # # # # # # ##### ####### ##### # ##### takk@deb83:~$
では、s~ファイルをコピーしましょう。特にオプションはつけません。
takk@deb83:~$ for i in s*;do cp $i copy_$i;done
lsで確認します。
takk@deb83:~$ ls -l 合計 40 -rw-r--r-- 1 takk takk 38 11月 23 23:43 1 -rw-r--r-- 1 takk takk 43 11月 23 23:43 2 -rw-r--r-- 1 takk takk 54 11月 23 23:43 3 -rw-r--r-- 1 takk takk 46 11月 23 23:43 4 -rw-r--r-- 1 takk takk 43 11月 23 23:43 5 -rw-r--r-- 1 takk takk 38 11月 23 23:55 copy_s_1 -rw-r--r-- 1 takk takk 43 11月 23 23:55 copy_s_2 -rw-r--r-- 1 takk takk 54 11月 23 23:55 copy_s_3 -rw-r--r-- 1 takk takk 46 11月 23 23:55 copy_s_4 -rw-r--r-- 1 takk takk 43 11月 23 23:55 copy_s_5 lrwxrwxrwx 1 takk takk 1 11月 23 23:53 s_1 -> 1 lrwxrwxrwx 1 takk takk 1 11月 23 23:53 s_2 -> 2 lrwxrwxrwx 1 takk takk 1 11月 23 23:53 s_3 -> 3 lrwxrwxrwx 1 takk takk 1 11月 23 23:53 s_4 -> 4 lrwxrwxrwx 1 takk takk 1 11月 23 23:53 s_5 -> 5 takk@deb83:~$
copy_〜ファイルが、シンボリックリンクではなく、TARGETのコピーとなってしまいました。
cpコマンドはデフォルトで、シンボリックリンクのコピーは、TARGETのコピーを行うようになっています。-dオプションを指定することで、シンボリックリンク自体のコピーを行うことができます。
なぜデフォルトがTARGETのコピーなのかというと、別ディレクトリでcp -dを使うと分かります。
takk@deb83:~$ mkdir dir1;cd dir1 takk@deb83:~/dir1$
このデイレクトリで、先ほどのシンボリックリンクを-dオプションでコピーしてみましょう。
takk@deb83:~/dir1$ for i in ../s*;do cp -d $i .;done takk@deb83:~/dir1$ ls -l 合計 0 lrwxrwxrwx 1 takk takk 1 11月 24 00:01 s_1 -> 1 lrwxrwxrwx 1 takk takk 1 11月 24 00:01 s_2 -> 2 lrwxrwxrwx 1 takk takk 1 11月 24 00:01 s_3 -> 3 lrwxrwxrwx 1 takk takk 1 11月 24 00:01 s_4 -> 4 lrwxrwxrwx 1 takk takk 1 11月 24 00:01 s_5 -> 5 takk@deb83:~/dir1$
lsの結果だけでは分からないので、fileコマンドでシンボリックリンクを見てみます。
takk@deb83:~/dir1$ file s_1 s_1: broken symbolic link to 1 takk@deb83:~/dir1$
はい。リンクが壊れていますね。単純にシンボリックリンクを他ディレクトリへコピーしても、パスが違うためTARGETが参照できないのです。
headもしてみましょう。
takk@deb83:~/dir1$ head s* | pr -t5 head: `s_1' を 読み込み用に開くことが出来ません: そのようなファイルやディレクトリはありません head: `s_2' を 読み込み用に開くことが出来ません: そのようなファイルやディレクトリはありません head: `s_3' を 読み込み用に開くことが出来ません: そのようなファイルやディレクトリはありません head: `s_4' を 読み込み用に開くことが出来ません: そのようなファイルやディレクトリはありません head: `s_5' を 読み込み用に開くことが出来ません: そのようなファイルやディレクトリはありません takk@deb83:~/dir1$
当然エラーとなります。
ではTARGETも本ディレクトリにコピーしたらどうなるでしょうか。
takk@deb83:~/dir1$ for i in ../{1..5};do cp $i .;done takk@deb83:~/dir1$ !head head s* | pr -t5 ==> s_1 <== ==> s_2 <== ==> s_3 <== ==> s_4 <== ==> s_5 <== # ##### ##### # ####### ## # # # # # # # # # # # # # # # ##### ##### ####### ##### # # # # # # # # # # # # ##### ####### ##### # ##### takk@deb83:~/dir1$
シンボリックリンクが通り、参照できるようになりましたね。
コメント