처음으로 사용자 파일을 이전 시스템에서 새 시스템으로 이동하고 있습니다. 내 목표는 간단한 구문 때문에 SCP를 사용하는 것입니다 scp -r source destination
. 먼저 다음 명령을 사용하여 파일 복사를 시도했습니다.
scp -r [email protected]:/home/someuser/* .
돌이켜보면 과거의 경험을 바탕으로 이 .
문제를 해결하기 위해 다음과 같이 했습니다.
scp -r [email protected]:/home/someuser/.* .
로 시작하는 모든 항목을 나타내는 와일드카드 문자입니다 .
. 분명히 (내가 이 질문을 하는 이유는) 내가 원하는 효과를 얻지 못합니다. 관찰된 것은 .
경로에서 한 수준 위로 이동하는 것으로 해석되어 /home/*
작업 디렉터리 자체가 아닌 내 작업 디렉터리 위에 파일을 복사하고 배치하기 시작했다는 것입니다.
두 번째 명령 실행에 대한 나의 해석이 맞습니까? 들어가자마자 고치기 쉬울 것 같아서 ~/backup
한 단계 업그레이드 했네요 ~
. rm -rf ~/someuser
명령을 중단하기 전에 각 사용자 이름을 복사했습니다 . 이 someuser
디렉토리는 다음 위치에 있어야 합니다.~/backup
이후 디렉터리에 포함된 파일이 아닌 디렉터리만 지정하여 원하는 파일을 복사하는 방법을 배웠습니다.
답변1
한 수준 위가 아니라 .
셸의 패턴 일치 구문에서 즉, *
모든 문자 수를 의미하므로 ..
각 디렉터리에 존재하는 항목과 일치하고 다음 항목을 가리킵니다. ls .*
Bash 및 기타 여러 셸을 사용하여 동일한 효과를 얻을 수 있습니다 .
특수 항목을 일치시키는 것은 .*
고통스럽고 .
결코 ..
유용하지 않습니다. 항목 .??* .[!.]
내의 명시적인 탐색 과 같은 보기 흉한 해결 방법을 사용하는 사람들을 볼 수도 있습니다 ..
. (*)
다행스럽게도 일부 더 똑똑한 쉘은 glob 결과에서 이 두 가지를 모두 제거합니다. zsh가 아마도 가장 눈에 띄지만 유일한 것은 아닙니다. (적어도 Bash 개발 버전에도 이 globskipdots
옵션이 있습니다.)
이 특별한 경우에는 SSH 서버가 glob을 확장하기 때문에 더 복잡하지만 근본 원인은 동일할 것으로 예상됩니다.
(*는 .??*
점 및 두 개 이상의 다른 문자와 일치하며 .[!.]
점 및 점이 아닌 문자와 일치합니다. 정규식에서는 *
의미 ?
가 약간 다릅니다.)