scp가 심볼릭 링크 대신 파일을 복사하도록 만드는 방법

scp가 심볼릭 링크 대신 파일을 복사하도록 만드는 방법

scp서버에 파일을 보내고 싶습니다 . 파일은 심볼릭 링크이고 실제로 내가 원하는 것은 소스 파일을 복사하는 것입니다.

소스 파일 경로는 대체될 수 있으므로 수동으로 추적하고 싶지 않습니다.

소스 파일을 사용할 수 있도록 절대 경로를 얻으려면 어떻게 해야 합니까 scp?

답변1

다음 줄을 시도해 보세요:

readlink -f `which command`

command변수 에 있는 경우 $PATH그렇지 않으면 알고 있는 경로를 지정해야 합니다.

답변2

Linux에서는 readlink심볼릭 링크의 내용을 읽고 readlink -f심볼릭 링크가 아닌 항목을 찾을 때까지 심볼릭 링크에서 심볼릭 링크, 심볼릭 링크로 추적합니다.

그러나 scp에는 이것이 필요하지 않습니다. scp는 항상 심볼릭 링크를 따릅니다(항상 파일 내용을 복사하고 메타데이터를 무시하지만 -p가능한 경우 파일 시간과 모드를 유지합니다).

scp가 보존할 수 있는 메타데이터와 보존할 수 없는 메타데이터에 대해 불만이 있다면 rsync를 사용하는 것이 좋습니다. 옵션이 없으면 rsync는 메타데이터를 무시하고 파일 내용을 복사합니다. 일반적으로 사용되는 옵션은 -a모든 일반 메타데이터(시간, 심볼릭 링크, 권한 및 소유권)를 보존하며 ACL 및 하드 링크와 같은 관련 없는 메타데이터를 보존하는 옵션도 있습니다.

답변3

lsstat명령의 사용을 비교 readlink하고 파일 작업을 /etc/localtime예로 들어 보겠습니다.

  • 사용엘에스:
    [flying@lempstacker ~]$ ls /etc/localtime 
    /etc/localtime
    [flying@lempstacker ~]$ ls -l /etc/localtime
    lrwxrwxrwx. 1 root root 35 Aug  2 22:41 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
    
  • 사용통계자료
    [flying@lempstacker ~]$ stat /etc/localtime
      File: ‘/etc/localtime’ -> ‘../usr/share/zoneinfo/Asia/Shanghai’
      Size: 35          Blocks: 0          IO Block: 4096   symbolic link
    Device: fd01h/64769d    Inode: 272202388   Links: 1
    Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2016-11-23 09:00:59.999887800 +0800
    Modify: 2016-08-02 22:41:26.090389904 +0800
    Change: 2016-08-02 22:41:26.090389904 +0800
     Birth: -
    [flying@lempstacker ~]$ stat -c "%N" /etc/localtime
    ‘/etc/localtime’ -> ‘../usr/share/zoneinfo/Asia/Shanghai’
    
  • 사용링크 읽기
    [flying@lempstacker ~]$ readlink /etc/localtime
    ../usr/share/zoneinfo/Asia/Shanghai
    [flying@lempstacker ~]$ readlink -f /etc/localtime
    /usr/share/zoneinfo/Asia/Shanghai
    

readlink -f이 명령이 가장 적합한 것 같습니다 .

-f 매개변수 설명

~에서man readlink:

-f, --canonicalize: 지정된 이름을 가진 모든 구성 요소의 모든 심볼릭 링크를 반복적으로 추적하여 정규화합니다. 마지막 구성 요소를 제외한 모든 구성 요소가 존재해야 합니다.

답변4

넌 할 수있어

readlink -f `which command`

아니면 Linux에서 이와 같은 것을 얻을 수 있습니다

stat `which command` | grep File

이를 스크립트에 추가하는 경우 오류가 있는지 확인하십시오. 심볼릭 링크가 존재하지 않는 경우 오류 메시지를 표시하지 않으려면 다음과 같은 것을 사용하십시오.

readlink -f "`which command`" 

관련 정보