내 디렉토리에는 텍스트 파일과 텍스트 파일을 가리키는 심볼릭 링크라는 두 개의 파일이 있습니다.
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