Unix에서 상대 경로를 사용하여 /etc/passwd를 홈 디렉터리 아래의 디렉터리에 어떻게 복사합니까? [폐쇄]

Unix에서 상대 경로를 사용하여 /etc/passwd를 홈 디렉터리 아래의 디렉터리에 어떻게 복사합니까? [폐쇄]

/etc/passwd이미 생성한 디렉토리에 새 이름으로 복사해야 합니다 my_passwd. 절대 경로를 사용하여 복사하는 방법을 이해합니다: cp /etc/passwd /home/user/work/my_passwd.

그래서 저는 이것이 .쉘에서 ..제가 있는 디렉토리에서 한 단계 위로 이동한 다음 를 입력하는 위치라는 것을 알고 있습니다 cd work. 집에 있다면 거기로 이동할 수 있습니까? 내가 잘못? 상대 경로를 사용하여 어떻게 복사합니까?

답변1

상대 경로는 로 시작하지 않는 경로입니다 /.

이 특정 예에서는 /etc/passwd복사하려는 파일의 절대 경로를 알고 있는 경우 절대 경로입니다.상대 경로로 변환하는 것은 (일반적으로) 실제 목적이 없습니다.(사실, 경로는 현재 디렉토리 트리의 어디에 있는지에 따라 달라지므로 상황이 혼란스러울 수 있습니다.)

파일을 복사하려는 디렉터리의 파일 이름 $HOME/work은 입니다 my_passwd. $HOME홈 디렉터리의 절대 경로로 확장됩니다.

절대 경로만 사용하여 파일을 복사합니다.

cp /etc/passwd "$HOME/work/my_passwd"

이는 현재 파일 시스템의 어디에 있는지에 따라 달라지지 않습니다(좋습니다).

파일의 상대 경로를 찾으려면 Linux에서 이 명령을 사용할 /etc/passwd수 있습니다 realpath(이 유틸리티는 다른 유형의 Unix 시스템에서는 사용할 수 없지만 최소한 Ubuntu에서는 사용할 수 있습니다). 현재 홈 디렉토리에 있다고 가정합니다( cd인수 없이 명령을 내린 후):

$ realpath --relative-to=. /etc/passwd
../../etc/passwd   

/etc/passwd이는 " 여기에서 두 개의 디렉토리를 찾은 다음 다음 위치 에 있음" 을 알려줍니다 etc.

상대 경로를 사용하여 홈 디렉터리에 있는 파일을 복사하려면(디렉토리 트리의 다른 곳에서는 복사할 수 없음):

$ cp ../../etc/passwd work/my_passwd

work/my_passwd기본 디렉터리에서 하위 디렉터리의 파일까지의 my_passwd상대 경로 입니다 work.

에테르의 조합

$ cp /etc/passwd work/my_passwd

또는

$ cp ../../etc/passwd "$HOME/work/my_passwd"

이것은 절대적으로 또는 상대적으로 경로를 지정하려는지에 따라 홈 디렉터리에서도 분명히 작동합니다.

답변2

상대 경로를 만드는 방법은 무엇입니까 /etc/passwd? 상대 경로를 만든 /다음 추가합니다 etc/passwd. 상대 경로를 만드는 방법은 무엇입니까 /? 현재 디렉터리의 깊이를 계산하고 루트를 향해 그 만큼의 단계를 진행합니다.

따라서 우리가 에 있다면 /home/user/work루트를 향해 이동을 세 번 사용할 것입니다 ../../../. 프로그래밍 방식으로 현재 경로의 슬래시 수를 세거나 모든 디렉터리 이름을 다음으로 바꾸고 ..첫 번째 슬래시를 끝으로 이동합니다.

Bash에서 후자를 수행해 보겠습니다.

shopt -s extglob
p=${PWD//+([^\/])/..}
p=${p#/}/
echo "current is: $PWD"
echo "path to /:  $p"

출력 예:

current is: /tmp/x
path to /:  ../../

/foo/bar/some/path아마도 더 실용적인 경우는 from 에서 까지의 상대 경로가 필요하다는 것입니다 /foo/bar/otherpath. 이 경우 공통 접두사를 제거하고 위의 솔루션을 적용하면 됩니다.

관련 정보