Linux "cp"는 대상 파일 대신 심볼릭 링크를 복사합니다.

Linux "cp"는 대상 파일 대신 심볼릭 링크를 복사합니다.

내 디렉토리에는 텍스트 파일과 텍스트 파일을 가리키는 심볼릭 링크라는 두 개의 파일이 있습니다.

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

답변4

사실 이것은 매우 이상한 행동이다.

명령의 별명에 충돌하는 매개변수가 있는지 확인하십시오 cp. 이렇게 하려면 다음을 실행하세요.type주문하다. (즉 type cp)

이 외에도 다음과 같은 대체 유틸리티를 사용하여 작업을 수행해 볼 수 있습니다.rsync또한 심볼릭 링크 처리도 지원합니다(매개변수 사용 --links --copy-links--hard-links

관련 정보