2009-03-02 3 views
19

Fedora에서 특정 복사본을 찾고 있습니다.어떻게 재귀 적으로 디렉터리를 다른 디렉터리로 복사하고 변경되지 않은 파일 만 바꿀 수 있습니까?

  • '웹 루트':

    나는 두 개의 폴더가 잡고 모든 웹 파일/이미지 등

  • '수출'에서 내 보낸 PHP, CSS, JS 문서의 수천을 포함하는 폴더 내 SVN 저장소.

내보내기 디렉토리에는 루트와 동일한 많은 파일/폴더가 있지만 루트에는 내보내기에없는 추가 파일/루트가 있습니다.

나는 다음과 같은 옵션을 사용하여 내 웹 루트와 수출의 모든 내용을 병합하고 싶습니다 : 수출의 버전은 웹 루트의 버전 안에 무엇 보다 다른 코드가 포함되어있는 경우

  1. 웹 루트에있는 파일을 덮어 쓰기 (어떤 자극
  2. 그러나 수출의 내용으로,이 (수출 버전 교체 라이브 버전) * 참고 나는 유지 webroots 권한/소유권을 부탁을 덮어 경우
  3. 파일의 권한/사용자/그룹을 유지) 살 수 없다 복사 중지
  4. 재귀 사본 (즉, 자세한되지 않음) 어떤 종류의 - 분명히 내가 이 수출 폴더와 하위 폴더가있는 모든 * 파일을 복사하고 싶은

내가 CP에 대한 연구의 조금을 한 적이 - 이 일을? 할 것

cp -pruf ./export /path/to/webroot 
+0

첫 번째 기준은 명확하지 않습니다. 대답은 주로 '웹 루트의 파일이 내보내기의 파일보다 최신 파일 인 경우 혼자 남겨 두는 것을 의미합니다.'라고 가정합니다. 당신이 진정으로 '내용을 비교하고 차이가 있다면 내보내기 버전 복사'를 의미한다면, 단순히 모든 것을 복사하십시오 ... 계속 ... –

+0

... 계속 ... 새 파일이 나타나고 오래된 파일 아마도 수정 시간을 제외하고는 사본 모두에서 동일하게 유지됩니다. –

+0

의견을 보내 주셔서 감사합니다. 질문을 업데이트하겠습니다. – barfoon

답변

24

exportwebroot의 해당 파일은 내용은 같지만 수정 시간이 다를 수 있지만 언제든지 불필요한 복사 작업을 수행 할 수 있습니다. 당신은 아마 rsync 약간 영리 행위를 얻을 것 : 만약 당신이 그렇게 할 필요가있는 경우

rsync -pr ./export /path/to/webroot 

게다가, rsync는 SSH 연결을 통해 한 호스트에서 다른 호스트로 파일을 복사 할 수 있습니다. 또한 세부적인 사항은 맨 페이지를 살펴보면 동작을 조정할 수있는 수많은 옵션이 있습니다.

편집 : : 권한 보존으로 무엇을 의미하는지에 대한 명확한 설명과 관련하여 -p 옵션을 생략하고 싶을 것입니다.

6
  1. -u 대상이 소스보다 오래된 경우 기존 파일 폴더를 덮어
  2. -p는 권한을 perserves 및
  3. -f은 상세에게 재귀 복사본을 만드는 -r
  4. 을 해제 날짜
  5. 당신이 CP 모든 올바른 인수를 가지고 같은

그래서

5

이 일 것 같은데 보인다 cpio 위해 (따라서, 아마도, GNU 타르도 그것을 할 수 있습니다) : 당신이 보존 소유자가 필요한 경우

cd export 
find . -print | cpio -pvdm /path/to/webroot 

, 당신은 물론, 루트로해야한다. -p 옵션은 '통과 모드'로, 위치 간 복사를 의미합니다. -v은 장황합니다 (대화 형이 아니며 차이가 있습니다). -d은 필요에 따라 디렉토리를 만드는 것을 의미합니다. -m은 보존 수정 시간을 의미합니다. 기본적으로 -u 옵션이 없으면 cpio은 대상 영역의 원본 영역에있는 파일보다 새로운 파일을 덮어 쓰지 않습니다.

관련 문제