シンボリックリンクのコピー

シンボリックリンクのコピーをします。
まずは、適当にファイルを作成。

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$ 

シンボリックリンクが通り、参照できるようになりましたね。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA