재귀 복사는 특정 이름의 디렉터리를 건너뜁니다.

재귀 복사는 특정 이름의 디렉터리를 건너뜁니다.

약 100GB의 디렉토리가 있습니다. 특정 폴더를 건너뛰고 이 디렉터리를 다른 위치로 복사해야 합니다(폴더가 많습니다). 다음은 내 요구 사항을 보여주는 깨진 코드입니다.

$ cp -r ~/directory_to_copy /path/to/copy --skip=foo --skip=bar

이 명령에는 예제 결과가 있습니다. 원래 디렉토리 트리는 다음과 같습니다.

~/directory_to_copy
  aaa
    foo
    doo
      bar
  bbb
    ccc
      ddd
        bar
      eee

복사된 트리는

/path/to/copy/
  aaa
    doo
  bbb
    ccc
      ddd
      eee

내 목적에 맞게 명령을 어떻게 작성할 수 있나요?

답변1

당신이 원하는 rsync:

rsync -va --exclude=foo --exclude=bar ~/directory_to_copy /path/to/copy 

--exclude불필요한 파일이나 디렉토리를 제외하는데 사용됩니다.

-vrsync를 장황하게 만듭니다(선택 사항).

-arsync에 재귀적으로 복사하고 파일 속성을 보존하도록 지시합니다. 이는 선택 사항이지만 사용하지 않는 경우 재귀 복사를 -a사용할 수 있습니다 .-r

보다 복잡한 요구사항의 경우 제외 및 포함 옵션을 지정할 수 있습니다. 옵션을 지정 -F하고 .rsync-filter소스 디렉터리 계층 구조의 다른 위치에 파일을 배치하여 한 디렉터리에서 다른 디렉터리로 제외/포함 설정을 변경할 수도 있습니다 . man rsync세부 사항이 있습니다.

답변2

find당신은 그것을 사용할 수 있습니다

find -depth ! -wholename '*foo*' ! -wholename '*bar*' -exec cp --parents '{}' /target/dir/ \;

a) 먼저 생략해야 하는 디렉토리를 찾아야 하고 b) -depth복사할 때 전체 경로를 생성하는 --parents옵션을 사용해야 합니다 cp.

그러나 빈 폴더도 건너뜁니다. find가 ./firstDIR에 도달하면 모든 파일이 복사되므로 사용할 -r수 없습니다 .cp

관련 정보