Jump to content

mv

This is a fully translated article. Click here for more information.
From DawoumWiki, the free Mathematics self-learning

mv
Original author(s)Ken Thompson, Dennis Ritchie
(AT&T Bell Laboratories)
Developer(s)Various open-source and commercial developers
Initial releaseNovember 3, 1971; 52 years ago (1971-11-03)
Operating systemUnix, Unix-like, Inferno, IBM i
PlatformCross-platform
TypeCommand
Licensecoreutils: GPLv3

mv는 하나 이상의 파일 또는 디렉토리를 한 곳에서 또 다른 곳으로 이동하는 유닉스 명령입니다. 만약 두 파일 이름이 같은 파일 시스템에 있으면, 이것은 간단한 파일 이름을 변경합니다; 그렇지 않으면 파일 내용이 새로운 위치로 복사되고 이전 파일이 제거됩니다. mv를 사용하려면 사용자에게 파일이 이동할 디렉토리에 대한 쓰기 권한이 있어야 합니다. 이것은 mv가 이동에 관련된 두 디렉토리 (즉, 소스 및 대상)의 내용을 변경하기 때문입니다. 같은 파일 시스템에 있는 파일에 mv 명령을 사용할 때, 파일의 타임스탬프가 업데이트되지 않습니다.

AT&T UNIX에서 파생된 유닉스 구현에서, cp, lnmv하드-링크된 바이너리를 갖는 단일 프로그램으로 구현됩니다. 동작은 경로 이름 argv[0]에서 선택됩니다. 이것은 하나의 단위로 패키지된 밀접하게 관련된 명령을 사용하여 사용자가 의도한 작업의 특정 과정을 지정할 수 있도록 하는 공통적인 기술입니다.

History

디렉터리 항목을 새로운 디렉터리로 이동하는 move 명령은 Multics 내에서 처음 구현되었습니다. 그것은 mv로 축약될 수 있습니다.[1] 나중에, mv 명령은 버전 1 유닉스에 나타났었고[2] 1987년 X/Open Portability Guide 이식성 가이드 문제 2의 일부가 되었습니다.[3] GNU coreutils에 번들된 mv 버전은 Mike Parker, David MacKenzie 및 Jim Meyering에 의해 작성되었습니다.[4] mv 명령은 IBM i 운영 시스템에도 이식되었습니다.[5]

Conflicting existing file

파일이름이 존재하는 파일 이름으로 이동되면, 기존 파일이 삭제됩니다. 만약 존재하는 파일이 쓰기 불가능하지만 쓰기 가능한 디렉토리에 있으면, -f (force) 옵션을 사용하지 않은 한 mv 명령은 계속하기 전에 확인 (터미널에서 실행하면)을 요청합니다.

파일이름이 존재하는 디렉토리로 이동될 때 관련된 모호성이 발생합니다. 기본적으로, mv는 이것을 이 디렉토리 내에서 이름을 이동하려는 것으로 처리합니다. GNU mv는 이 가정을 비활성화하고 대신에 디렉토리를 덮어쓰려고 시도하는 -T 스위치를 가집니다. 역 -t는 디렉토리로 이동 작업을 명시적으로 만듭니다.[4]

Moving versus copying and removing

같은 파일 시스템 내에서 파일을 이동하는 것은 일반적으로 파일을 복사하고 그런-다음 원본을 제거하는 것과 다르게 구현됩니다. 이름-바꾸기 시스템 호출을 지원하지 않는 플랫폼에서, 새로운 링크가 새로운 디렉토리에 추가되고 원래 링크는 삭제됩니다. 파일의 데이터는 접근될 수 없습니다. 모든 POSIX-호환 시스템은 이름-바꾸기 호출을 구현합니다.

실제 이동 (실제로 이름-바꾸기)은 순환적인 복사-와-이동 절차보다 훨씬 빠릅니다. 파일의 i-번호 ("inode 번호"의 약자)는 변경되지 않습니다. 개념적으로 말해서 "이동"의 결과로 변경되는 정보를 목록화하기만 하면 이동 중인 파일을 읽는 데 권한이 필요하지 않습니다. 소스 및 대상 디렉토리가 수정되고 있기 때문에, 재치있게, 대상 디렉토리 내에서 항목이 생성되고 소스 디렉토리 내에서 삭제되며, 이동을 완료하려면 두 디렉토리의 "쓰기" 권한이 필요합니다. 한 파일 시스템에서 또 다른 파일 시스템으로 파일을 이동하는 것이 완전히 실패하거나 원자 복사-와-삭제 작업으로 자동으로 수행될 수 있습니다; 실제 세부 사항은 구현에 따라 다릅니다.

한 단계 상위 디렉토리에서 다른 상위 디렉토리로 디렉토리를 이동하려면 이전 및 새로운 상위 디렉토리를 수정할 수 있는 권한 외에도 이동 중인 디렉토리에 대한 쓰기 권한이 필요합니다. 이것은 디렉토리 항목 ".."에 대해 i-번호 (현재 디렉토리의 상위에 대한 별칭으로 모든 문맥에서 사용할 수 있음)가 이름-바꾸기의 결과로 변경되기 때문입니다.

Options

대부분의 mv 버전은 다음을 지원합니다:

  • -i 대화식으로 (interactively) 처리, 존재하는 파일을 덮어쓸 파일을 이동하기 전에 표준 오류에 대한 프롬프트에 씁니다. 만약 표준 입력에서 응답이 'y' 또는 'Y' 문자로 시작하면, 이동이 시도됩니다. (이전 -f 옵션을 무시합니다.)
  • -f 목적지 강제 (force) 덮어쓰기 (이전 -i 옵션을 덮어쓰기).

이들 옵션은 나중에 POSIX 및 SUS의 기반이 되는 X/Open 이식성 지침의 일부입니다. 모든 POSIX-호환 mv 구현은 이것을 지원해야 합니다.[6]

Examples

Command Explanation
mv myfile mynewfilename 'myfile'의 이름을 'mynewfilename'으로 바꿉니다.
mv myfile subdir/myfile 현재 디렉토리를 기준으로 'myfile'을 'subdir/myfile'로 이동합니다.
mv myfile subdir 이전 명령과 동일하며, 파일이름은 같은 것으로 암시됩니다.
mv be.03 /mnt/bkup/bes 마운트된 볼륨 'bkup'의 'bes' 디렉토리에 'be.03'을 복사하고, 그런-다음 'be.03'는 제거됩니다.
mv afile another mydir 여러 파일을 'mydir' 디렉토리로 이동
mv /var/log/*z ~/logs 이것은 만약 '/var'가 다른 파일 시스템에 있으면, 자주 그러하듯이, 파일이 복사 및 삭제되므로, 예상보다 시간이 오래 걸립니다. ~를 사용자의 홈 디렉토리로 확장하고 *와일드카드 문자로 취급합니다.

위의 예제에서, /mnt는 주어진 파일 시스템이 마운트되는 디렉토리 ("마운트 지점")를 참조함을 주목하십시오. 그러한 디렉토리 /mnt의 이름을 지정하는 것은 널리 사용되는 규칙이지만 반드시 필요한 것은 아닙니다. "파일 시스템"은 논리적으로 하나의 단위로 여겨지는 독립 트리로 생각될 수 있습니다; 그것의 루트는 관리자의 선택의 디렉토리 꼭대기에 "마운트"됩니다. 해당 디렉토리의 임의의 이전 내용은 보이지 않지만, 그것들은 새로운 볼륨이 마운트 해제될 때 "복원"됩니다.

See also

References

  1. ^ Multics Commands
  2. ^ mv(1) – FreeBSD General Commands Manual
  3. ^ mv: move files – Commands & Utilities Reference, The Single UNIX Specification, Issue 7 from The Open Group
  4. ^ a b mv(1) – Linux General Commands Manual
  5. ^ IBM. "IBM System i Version 7.2 Programming Qshell" (PDF). Retrieved 2020-09-05.{{cite web}}: CS1 maint: url-status (link)
  6. ^ Single Unix Specification#1980s: Motivation

External links