한 서버(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
. 수퍼유저가 없으면 소유권을 변경할 수 없습니다.