mv 파일 / dir이 왜 파일을 현재 작업 디렉토리의 하위 디렉토리로 옮기지 않습니까?


10

나는 내 /etc디렉토리에 있었고 명령을 입력했다.

me@mylaptop:/etc$ sudo mv MyFile.conf /openvpn

파일을 디렉토리 openvpn의 하위 디렉토리 인 디렉토리로 옮길 것이라고 생각했습니다 /etc. 그러나 그것은 일어난 일이 아닌 것 같습니다. 내가 확인할 수있는 것은 명령이 실행되었다는 것입니다.

답변:


51

이 이름의 디렉토리가 존재하지 않는 경우 파일의 이름을 openvpn루트 디렉토리로 변경했습니다 /. 이를 되돌리려면 다음을 실행하십시오.

sudo mv /openvpn /etc/MyFile.conf

디렉토리가 존재하면 그 안에서 파일을 옮겼다면, 다음과 같이 되돌아갑니다.

sudo mv /openvpn/MyFile.conf /etc/

현재 디렉토리의 기존 하위 디렉토리로 이동하려면 다음 중 하나를 실행할 수 있습니다. 상대 경로를 사용 합니다.

mv MyFile.conf openvpn
mv MyFile.conf openvpn/
mv MyFile.conf ./openvpn
mv MyFile.conf ./openvpn/

.는 현재 디렉토리에 대한 링크이므로 ./경로의 시작 부분은 "이 디렉토리에 있음"을 의미합니다. 끝에있는 슬래시 openvpn는 디렉토리 임을 의미하며 그 안에서 파일을 이동하려고합니다. 제공하지 않으면 이 이름의 디렉토리가 존재 하면 파일이 파일로 이동 하고 파일 이름이로 변경 됩니다 openvpn. A의 /말에, mv디렉토리가 누락 된 경우 경고합니다 없는 이름을 그 이름을 변경하지 않으려면 안전한 방법은, 그래서.

당신의 경로로 시작하면 /, 다른 한편으로는의 절대 항상 루트 디렉토리를 기준으로의 경로에 관계없이 현재 작업 디렉토리의 /. 파일과 대상 모두에 절대 경로를 사용하면 명령은 다음과 같습니다.

mv /etc/MyFile.conf /etc/openvpn
mv /etc/MyFile.conf /etc/openvpn/

추가 자료


2
디렉토리가 존재하는지 여부를 모르는 경우 sudo mv /openvpn/MyFile.conf /etc/먼저 명령을 시도하십시오 . 가능한 시나리오에서 디렉토리가 존재하지 않으면 오류 (아마 "디렉토리가 아님")가 발생하고 파일 시스템을 건드리지 않습니다. 그런 다음, 당신은 할 수 있습니다 sudo mv /openvpn /etc/MyFile.conf.
flarn2006

9

당신은 사용해야합니다

me@mylaptop:/etc$ sudo mv MyFile.conf openvpn/

MyFile.conf파일을의 openvpn하위 디렉토리 로 이동합니다 /etc/.

반면에

me@mylaptop:/etc$ sudo mv MyFile.conf /openvpn

대신 파일을 /디렉토리로 이동합니다 openvpn(예 :로 이름 바꾸기 openvpn) ( /openvpn디렉토리가 존재하지 않는다고 가정 ).


3
또한 첫 번째 명령 끝의 슬래시는 선택 사항입니다. 그러나 OP와 같은 혼란스러운 상황 (또는 더 중요한 경우 중요한 파일을 덮어 쓰는 것)을 만드는 것이 아니라 디렉토리가 아닌 경우 명령이 실패하게되므로 좋은 습관이 될 것입니다.
flarn2006

4

파일을 이동할 때 OS에 파일을 넣을 디렉토리 또는 파일에 제공하려는 새 경로를 알려줍니다.

OS에게 "/ openvpn"이라고 말하였습니다. 따라서 정확히 그렇게 할 것입니다. / openvpn이 존재하는지 (루트 디렉토리에있는 "openvpn"이라는 객체를 의미 함) 디렉토리인지 확인하고, 파일을 디렉토리로 옮기거나 / openvpn이 파일이거나 존재하지 않는 경우 파일 이름을 바꾸고 이동하여 이제 / openvpn으로 액세스 할 수 있습니다.

원하는 것은 파일 시스템 루트 디렉토리에있는 디렉토리 가 아니라 현재 디렉토리에있는 "openvpn"디렉토리 로 옮기는 것입니다 (이는 "/"가 의미하는 것입니다). 따라서 절대 경로 "/ openvpn"이 아니라 move 명령에서 해당 디렉토리 를 가리켜 야했습니다 . 다음 중 하나가 작동합니다.

  • mv MyFile.conf openvpn -내 현재 디렉토리에서 "openvpn"을 찾으십시오.
  • mv MyFile.conf /etc/openvpn -절대 경로 / etc / openvpn을 찾으십시오
  • mv MyFile.conf openvpn/ -내 현재 디렉토리에서 openvpn이라는 디렉토리를 찾으십시오.
  • mv MyFile.conf ./openvpn - "현재 디렉토리"를 더욱 분명하게 만듭니다.

짧은 버전- "/"를 사용하여 "내 현재 디렉토리"를 의미하므로 "/ openvpn"은 "현재 현재 디렉토리에있는 openvpn"을 의미합니다. 그러나 선행 "/"는 "루트 디렉토리"만을 의미하므로 "/ openvpn"은 "루트 디렉토리의 openvpn"을 의미합니다. 필요한 것은 "openvpn"또는 "openvpn /"을 사용하는 것입니다. " 현재 디렉토리의 " openvpn "을 의미 합니다.


1
이 답변이 왜 다운 보트인지 확실하지 않습니다. 정확하고 실제로 가장 명확하다고 생각합니다!
궤도에서 가벼움 경주

1

로 시작 /하는 경로는 상대 경로가 아닌 절대 경로입니다.

모든 경로가 항상 현재 디렉토리와 관련이 있다면 cd /etc우선 어떻게해야 합니까? 당신은 그 cd ../../../../../etc수준이 충분했음을 희망 ..하거나 cd ..루트 디렉토리에 도착할 때까지 계속 해야합니다.

또는 절대 경로를 표현하려면 다른 구문이 필요합니다. 그러나 유닉스는 /프로세스의 현재 작업 디렉토리와 관련된 다른 것을 절대적 으로 의미 하기로 결정했습니다 . 그래서 mv MyFile.txt openvpn작동합니다.


그리고 아닙니다. 존재하거나 존재하지 않는 파일에서 절대 대 상대를 유추하는 것은 잘 작동하지 않습니다. mkdir시스템 호출이 경로를 시스템 호출과 다르게 처리 chdir하거나 rename시스템 호출을 다르게 처리 하지 않기를 원 하며, mv프로그램이 그렇게 mv하면 출력 파일 이름을 사용하는 다른 프로그램과 다른 프로그램 간에 불일치 가 생길 수 있습니다 .

mvrename()대상이 디렉토리 인 경우 소스 파일 이름을 해당 대상 디렉토리에 추가하고 다시 시도 하기 때문에 이미 특별 합니다. 그러나 간단한 구현 전략 중 하나 rename()EEXIST또는로 실패한 첫 번째 시스템 호출에 의존한다는 점에 유의하십시오 EISDIR. 따라서 파일 시스템을 확인하기 전에 경로가 상대적인지 또는 절대인지 알아야합니다.

초기 Unix는 느린 컴퓨터에서 실행되어 디렉토리가 존재하는지 추가 검사하면 캐시되지 않은 경우 추가 I / O 또는 디렉토리 캐싱에 대한 추가 압력을 의미 할 수 있습니다. 과거의 효율성 주장에 의지하지 않고 시스템이 작동하는 적절한 방법이 아니 었습니다.)


1

다른 답변을 완료하려면 :

mv file.txt /location

Windows의 경우와 동일

mv file.txt c:\location

리눅스 의 파일 시스템파일 시스템 계층 표준 , 즉 FHS 에 따라 생각됩니다 . 파일의 특성과 내용에 따라 파일을 어디에 배치해야하는지 알 수 있습니다.

첫 번째 폴더 ( c:Windows 와 동일 )는 /입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.