cp -R에 대한 POSIX 설명

cp -R에 대한 POSIX 설명

cp -Rbash 명령을 실행하는 방법과 bash 명령을 실행하는 방법이 정말 혼란스럽습니다.POSIX 단어는 어떻게 되나요?

posix 정의를 고려하면 cp -R srcDir existingDestDir결과는 다음과 같습니다.콘텐츠대신 sh 의 bash 및 csh 구현은 이를 기존 DestDir에 복사합니다 srcDir.existingDestDirsrcDir

posix cp -R 정의의 관련 부분:

각 source_file에 대해 다음 단계를 수행해야 합니다.

(...)

2. source_file이 디렉터리 유형인 경우 다음 단계를 수행해야 합니다.

(...)

에프. source_file 디렉터리의 파일은 여기에 나열된 네 단계(1~4)에 따라 해당 파일을 source_files로 사용하여 dest_file 디렉터리에 복사해야 합니다.

누구든지 나를 위해 이 문제를 해결할 수 있다면 매우 감사하겠습니다.

답변1

POSIX 문서에서 추가 단락을 놓쳤습니다.

세 번째 요약 형식( cp -R [-H|-L|-P] [-fip] source_file... target)은 -R 옵션이 지정된 두 개 이상의 피연산자로 표시됩니다. cp 유틸리티는 각 source_file의 파일 계층 구조에 있는 각 파일을 다음과 같은 이름의 대상 경로에 복사해야 합니다.

  • target이 존재하고 기존 디렉터리의 이름을 지정하는 경우 파일 계층 구조의 각 파일에 해당하는 대상 경로 이름은 target, 단일 <slash>문자(target이 로 끝나지 않는 경우 <slash>) 및 해당 디렉터리에 대한 파일 경로 이름의 연결이어야 합니다. . source_file이 포함된 디렉터리입니다.

귀하의 경우에는

cp -R srcDir existingDestDir

"source_file"은 srcDir, "target"은 입니다 existingDestDir. 해당 단락에서 "파일 계층 구조에 있는 각 파일의 대상 경로"는 existingDestDir/srcDir표시되는 동작을 설명하는 가 됩니다.

답변2

명확하게 해야 할 몇 가지 사항이 있습니다.

  • cp독립형 유틸리티입니다bash. 일부 사람들은 다음과 같은 기본 제공 명령으로 인해 혼란을 겪을 수 있습니다.cd그리고pwd이는 POSIX 쉘이거나 그 일부일 수 있습니다.
  • POSIX는 다음을 가리킨다.시리즈 문서The Open Group과 IEEE가 공동으로 관리하며,IEEE 표준 1003.1™.
  • bashPOSIX에 설명된 기능을 구현하는 여러 셸 중 하나입니다. 대부분의 쉘은 POSIX 쉘과 약간의 차이점이 있습니다.sh;셸이 실행되는 이름은 POSIX에 설명된 기능입니다.
  • 이 섹션의2.14.특수 내장 유틸리티, POSIX는 말합니다.

용어"내장"이는 쉘이 유틸리티를 검색하지 않고 직접 실행할 수 있음을 의미합니다. 구현에서는 다음을 사용하도록 선택할 수 있습니다.어느내장 유틸리티. 그러나 여기에 설명된 특수 내장 유틸리티는 두 가지 면에서 일반 내장 유틸리티와 다릅니다.

그래서 원칙적으로cp 할 수 있다bash개발자가 선택하면 그 일부가 될 수 있습니다. bash실제로는 잘 수행할 수 있는 기능을 추가하여 작업을 더 복잡하게 만들 필요가 없기 때문에 이 작업은 수행되지 않습니다.각기에서 bash.

다음으로 질문에 언급된 링크는기반으로POSIX에서는 그렇지 않습니다.이것POSIX 문서. 마지막에 면책 조항을 볼 수 있습니다.

부분 이 텍스트의 재인쇄 및 재인쇄...

그리고

이 페이지에 나타나는 인쇄상 또는 형식 오류는 소스 파일을 매뉴얼 페이지 형식으로 변환하는 동안 발생했을 가능성이 높습니다.

그러나 매뉴얼 페이지의 대부분은 POSIX에서 그대로 복사되었습니다. POSIX 문서는 작성자가 기존 구현이 다르다는 것을 알고 있는 부분을 자세히 설명하지 않고 구현 내부 세부 사항이 다를 수 있다고 생각하는 부분을 자세히 설명하지 않는 준법적 스타일로 작성되었습니다. 따라서 프로그램이 수행한 작업에 대한 단계별 설명이 제공되며, 다양한 단계가 어떻게 관련되어 있는지 설명하기 위해 다른 작성자가 추가한 세부 정보는 (보통) 생략됩니다. 일부 POSIX 문서는 섹션을 제공합니다.근본적인, 그러나 이들조차도 소수에 속하는 것으로 보입니다. 결과가 모호한 경우가 많지만 기존 프로그램의 공통 특성을 설명하려는 의도를 고려해야 합니다.

이것은 혼란을 나타내는 질문의 특정 부분입니다.

posix 정의를 고려하면cp -R srcDir 기존 대상 디렉터리결과적으로 내용소스 디렉토리에 복사됩니다기존 대상 디렉토리. 대신에소스 디렉토리에 복사됩니다기존 대상 디렉토리sh의 bash 및 csh 구현에서.

문서의 요지는목차소스에서도 다음과 동일한 반복 및 재귀 설명을 사용하여 처리됩니다.정상문서. 규칙 중 하나가 설명되어 있습니다.요약부분:

cp -R [-H|-L|-P] [-fip] source_file... target

-R이것은 세 번째 예이며 이 옵션이 언급된 유일한 예입니다 . 이에 대해서는 나중에 언급하겠습니다.설명하다:

이것제삼다이제스트 형식은 -R 옵션이 지정된 두 개 이상의 피연산자로 표시됩니다. 이것cp유틸리티는 각 source_file의 파일 계층 구조에 있는 각 파일을 다음과 같은 이름의 대상 경로에 복사해야 합니다.

  • 만약에표적존재와 이름기존 디렉토리, 파일 계층의 각 파일에 해당하는 대상 경로의 이름은 다음을 연결해야 합니다.표적, 단일 <slash>문자인 경우표적a로 끝나지 않으며 <slash>포함된 디렉토리에 상대적인 파일의 경로 이름입니다.소스 파일.

  • 만약에표적존재하지 않고 두 개의 피연산자가 지정된 경우 해당 대상 경로 이름은 다음과 같습니다.소스 파일~해야 한다표적;파일 계층 구조의 다른 모든 파일에 대한 해당 대상 경로의 이름은 다음과 같이 연결되어야 합니다.표적, <slash>문자 및 파일에 대한 상대 경로 이름소스 파일.

즉, 디렉터리 이름은 첫 번째 글머리 기호 항목에서 "파일"로 처리되며 대상 디렉터리 이름과 연결됩니다.

추가 자료:

GNU coreutils 매뉴얼 페이지에는 자세한 정보가 부족합니다. Solaris 매뉴얼 페이지에서 POSIX 문서의 스타일 중 일부를 볼 수 있는데, 더 명확하게 작성되어 있습니다:

/usr/bin/cp -r | -R [-H | -L | -P] [-fip@] source_dir... target

그리고

세 번째 요약 양식에서는 다음에 의해 지정된 하나 이상의 디렉터리가소스 디렉토리대상이 지정한 디렉터리에 복사합니다. 또는 중 하나를 지정해야 합니다 -r. -R각각소스 디렉토리, cp모든 파일과 하위 디렉터리를 복사합니다.

관련 정보