/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
. 이 경우 공통 접두사를 제거하고 위의 솔루션을 적용하면 됩니다.