셸: 다양한 경로 패턴

셸: 다양한 경로 패턴

Linux에서 다음 경로 패턴의 차이점은 무엇입니까

  • ./예를 들어cp ./ [destination-path]
  • ./.예를 들어cp ./. [destination-path]
  • ./*예를 들어cp ./* [destination-path]
  • ./**예를 들어cp ./** [destination-path]

답변1

처음 두 개는 재귀 복사에 더 적합합니다. 즉, cp -r소스가 명명된 디렉터리이고 대상이 존재하는 경우 차이가 발생합니다. 이것들:

cp -r src/  dest
cp -r src/. dest

첫 번째는 생성된 파일에 복사되어 ( ) src되고 , 후자는 그 내용을 복사하므로 가 됩니다 .destdest/srcsrc/adest/src/asrcsrc/adest/a

다른 두 개에서는 쉘이 글로브를 확장하므로 -r.

cp ./*  dest
cp ./** dest

첫 번째 경우, 쉘은 ./*현재 디렉토리의 파일 이름 목록(점으로 시작하는 이름 제외)으로 확장하고 cp이를 복사합니다. 두 번째 경우, 이를 지원하는 쉘은 ./**파일 이름의 재귀 목록으로 확장되고 cp나열된 파일을 다시 복사합니다.

설정하면 **최소한 Bash 및 ksh에서 재귀가 작동합니다.shopt -s globstarset -o globstar

이름이 점으로 시작하는 파일이나 디렉터리는 트리에 나타나는 수준에 관계없이 Bash 또는 ksh 결과에 포함되지 않으므로 점 **을 사용하는 것은 전체 디렉터리 구조의 완전한 복사본을 만드는 좋은 방법이 아닙니다. cp -r . dest파일도 복사됩니다.

Bash는 shopt -s dotgloband 를 사용하여 포인트 파일 숨기기를 해제할 수 있습니다. ksh에 비슷한 기능이 있는지는 잘 모르겠습니다.***

관련 정보