루트 사용자 없이 한 서버에서 다른 서버로 디렉토리 구조를 복사하는 방법은 무엇입니까?

루트 사용자 없이 한 서버에서 다른 서버로 디렉토리 구조를 복사하는 방법은 무엇입니까?

한 서버(Unix)에서 다른 서버(Linux)로 디렉토리 구조를 복사하는 가장 좋은 방법을 알고 싶습니다.

  • 루트 사용자 없음
  • 서버가 연결되어 있지 않습니다(예: 서버 간에 SSH를 직접 사용할 수 없음).
  • 파일은 복사하지 않고 폴더와 하위 폴더만 복사하면 됩니다.
  • 폴더의 권한도 전송되어야 합니다.

그래서 user@server1과 일부 디렉토리 구조가 있습니다. 이 구조를 파일 없이 동일한 권한으로 user@server2에 복사해야 합니다. 두 서버의 사용자는 동일한 권한을 갖고 동일한 그룹에 속하며 서버는 연결되지 않습니다.

편집: 나는 server1이 Unix이고 server 2가 Linux라는 것을 언급하는 것을 잊었습니다. 따라서 Unix 서버에서 proycon의 코드를 실행하려고 하면 다음 메시지가 나타납니다. tar: 인식할 수 없는 플래그: z Tom Hunt의 옵션을 시도하면 -printf는 유효한 옵션이 아닙니다.라는 메시지가 나타납니다. 또한 사용자는 동일한 권한을 갖고 동일한 그룹에 속하더라도 이름이 다르다는 점을 언급할 가치가 있습니다. 그래서 나는 user_xy@server1과 user_zx@server2를 가지고 있습니다.

답변1

rsync이상적으로는 또는 과 같은 작업을 수행 scp하지만 머신이 실제로 연결되어야 합니다. 직접 전송할 수 없다면 tar사용자, 권한 및 심볼릭 링크를 보존하는 with 를 사용하기로 선택하겠습니다.find

호스트에서:

$ find yourdirectory/ -type d | tar -cvzf archive.tar.gz --no-recursion --files-from -

어떤 방법으로든 아카이브를 전송하세요(ftp? USB 스틱? 연기 신호?).

대상 호스트에서:

$ tar -xvzf archive.tar.gz

답변2

존재하다 server1:

find . -type d -printf '%p\n%m\n' >dir_list

dir_list적절하다고 판단되는 대로 파일을 server1에서 server2로 전송하십시오.

존재하다 server2:

while read -r filename; do
    read -r perms
    mkdir -p "$filename"
    chmod "$perms" "$filename"
done <dir_list

그러면 실행 중인 사용자가 소유한 모든 디렉토리가 생성됩니다 server2. 수퍼유저가 없으면 소유권을 변경할 수 없습니다.

관련 정보