SCP 복사 숨김 파일을 만드는 방법?


63

종종 SCP를 사용하여 파일, 특히 웹 관련 파일을 복사합니다. 문제는 이렇게 할 때마다 숨겨진 파일 (예 : .htaccess)을 복사하라는 명령을받을 수 없다는 것입니다.

나는 일반적으로 이것을 호출합니다 :

scp -rp src/ user@server:dest/

숨겨진 파일은 복사하지 않습니다. 나는 이것을 다시 불러 scp -rp src/.* ...내고 싶지 않다. (어떤 것을 수행함으로써 -그것은 어쨌든 이상 .하고 ..의미가있다.

scp맨 페이지에 "숨겨진 파일 포함"에 관한 내용이 없습니다 .

어떻게하면됩니까?


나는 src/.*또한 사본 src/..(부모 디렉토리)을 가정합니다 .
Ken Sharp

답변:


67

숨겨진 파일과 절대적으로 일치해야합니다. 소스의 끝에 /는 "이 디렉토리 아래의 모든 파일"이라고 표시되어 있습니다. 그럼에도 불구하고 테스트와 연구는 당신을 이끌어냅니다. 이것은 바보 같은 행동입니다.

" 답변 "은 소스의 끝에 점을 추가하는 것입니다.

scp -rp src/. user@server:dest/

진짜 대답은 rsync를 사용하는 것입니다.


나는 이것을 아직 깨닫지 못한 좋은 속임수입니다.
cstamas

21
rsync -avz -e ssh --progress src / user @ server : dest /
MikeyB 2016 년

2
그 행동을 재현 할 수 없습니다. scp -r source/ host:source2도트 파일을 복사합니다. 2007 년 OpenSSH 5.1에서 작동합니다.
Mikel

3
.보안 문제로 인해 끝에 추가하면 더 이상 작동하지 않습니다 (2019). 여기에 설명되어 있습니다 : superuser.com/questions/1403473/scp-error-unexpected-filename
Stéphane

25

rsync를 시도 할 수 있습니다. 이 작업에 더 적합합니다.

rsync -av src / user @ server : dest /

(그리고 매뉴얼 페이지를 읽을 가치가 있습니다.)


2
나는 항상 rsync에 --progress 옵션을 사용합니다. = D 없이는 살 수 없습니다
Hofa

1
@Hofa 저는 보통 -P를 더 짧고, 이미 --progress를 포함하고 있으며, 이미 진행 상황에 관심이 있다면 이해할 수있는 부분을 포함하기 때문에 -P를 사용합니다. ;-)
cstamas

9

소스 디렉토리 뒤에 슬래시를 넣지 마십시오. 코드는 다음과 같습니다.

scp -rp src user@server:dest/

이렇게하면 모든 숨겨진 파일이 포함 된 원격 시스템의 'dest'아래에 'src'디렉토리가 생성됩니다. 아마도 정확히 원하는 것은 아니지만 src에 숨겨진 파일을 복사합니다.


3

다음은 문제를 해결할 것입니다. 지속적인 통합 환경에서 완전히 테스트되었습니다.

scp -rp src/. user@server:dest/
example scp -rp /usr/src/code/. content001@172.11.11.11:/usr/dest/code/

그것이 도움이되기를 바랍니다.


최근 scp를 업데이트 한 후 결과는 scp: error: unexpected filename: . 입니다. 배포판과 호환되는지 테스트하십시오. Googler :)
Moritz Friedrich

1

숨겨진 파일 만 복사하려면이 명령을 사용하십시오.

scp -rp /path_to_copy_hidden/.[!.]* user@host:/path_to_paste/

실제 게임은 (숨김)으로 /.[!.]*시작하는 파일을 나타내는 태그입니다.


0

위의 scp 솔루션 중 어느 것도 나를 위해 일하지 않았습니다. 그러나 cygwin에서 다음이 작동한다는 것을 알았습니다. scp -r directory / * host : directory '*'는 보이는 모든 파일과 일치하고 보이지 않는 파일은 건너 뛰었습니다.


0

원격 컴퓨터에서 비밀번호 로그인이 비활성화되어 있고 로그인하는 유일한 방법은 공개 키를 사용하는 경우 다음을 사용할 수 있습니다.

$ rsync -av -s 'ssh -i /path/to/your/private/SSH/key' --progress user1@remote.host:/remote/source/directory/ /local/destination/directory/

숨겨진 파일도 복사합니다.

또한 "user1"은 해당 파일을 읽을 수있는 권한이 있어야합니다. 예를 들어이 방법으로 다른 사용자의 ssh 폴더를 복사 할 수 없습니다.


0

scp정규 표현식을 지원,이 멋지게 당신을 위해 트릭을 할 것입니다 :

scp -rp src/(*|.*) user@server:dest/


0

숨겨진 파일을 처리하는 분산 개정 제어

때문에 CVE-2018-20685 취약점의 /.트릭은 더 이상 사용할 수 없습니다 와 함께 scp. 그러나 gitHg Mecurial 과 같은 분산 개정 제어는 다른 파일과 같이 숨겨진 파일을 처리합니다. 내가 좋아하는 Hg Mercurial 의 명령은 다음과 같습니다 .

server:$ sudo apt install mercurial
client:$ sudo apt install mercurial
client:$ hg init src
client:$ cd src/
client:$ hg addr
client:$ hg com -m "first commit"
client:$ cd
client:$ hg clone src ssh://user@server/dest/

후속 변경 사항은 명령을 client:$ hg com -m "commit message"사용하여 다시 커밋 한 다음 푸시 해야합니다 client:$ hg push. 이 Hg Mercurial 치트 시트 에서 변경 사항을 푸시하는 방법에 대해 자세히 알아보십시오 .

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