私のディレクトリには、テキストファイルとテキストファイルを指すシンボリックリンクという2つのファイルがあります。
base_v21.txt -> base_v001.txt
base_v001.txt
base_v001.txt
次のコマンドを使用してコピーしようとすると:
# cp base_v001.txt /targetdir
base_v001.txt
コピーされたのではなく複製されbase_v21.txt
ました。
# ls /targetdir
base_v21.txt
そのため、コピーするファイルをフルファイル名で指定してもシンボリックリンクがコピーされます。
-L
シンボリックリンクを使用したり逆参照したりするための投稿を見たことがありますが、-H
シンボリックリンクではなくターゲットファイル自体をコピーしようとしているので、私の場合は実際には適用されません。
シンボリックリンクとターゲットファイルが同じディレクトリにある理由については、私は制御できません。
答え1
この試み、
目的地を見てみましょう/tmp/
代わりにターゲットファイルをコピーするには、次の手順を実行しますsymlink
。
readlink -ne base.txt | xargs -0 cp -t /tmp/
答え2
シンボリックリンクのターゲットを取得する最も簡単な方法は、次の-L
オプションを使用することです。
-L, --dereference は常に SOURCE のシンボリックリンクに従います。
このコマンドは目標を達成します。
cp -L base_v001.txt /targetdir
答え3
新しいファイル名が指定されていない場合、ディレクトリにコピーすると、ソースファイルと同じ名前の新しいファイルがターゲットディレクトリに作成されます。したがって、次のコマンドは同じ出力を提供します。
> cp base_v21.txt /targetdir
> cp base_v21.txt /targetdir/base_v21.txt
ファイルの内容を含む "base_v21.txt"という名前の新しいファイルをソースディレクトリに作成します。この場合、シンボリックリンクにより「base_v001.txt」の内容になります。デフォルトでは、次の操作を行います。
> cat base_v21.txt >> /targetdir/base_v21.txt
したがって、コピー後に次のコマンドが同じ結果を提供すると予想できます。
> cat base_v21.txt
> cat base_v001.txt
> cat /targetdir/base_v21.txt
次の例では、ハードリンクまたはシンボリックリンクでこのようなことが発生していることがわかります。
> touch base_v001.txt
> ln -s base_v001.txt base_v21.txt #create soft link
> cat "test" >> base_v001.txt
> mkdir dir
> cd dir
> cp ../base_v21.txt .
> ls
base_v21.txt
>cat base_v21.txt
test
> ln base_v001.txt base_v21.txt #create hard link
> cat "test" >> base_v001.txt
> mkdir dir
> cd dir
> cp ../base_v21.txt .
> ls
base_v21.txt
>cat base_v21.txt
test