약 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
불필요한 파일이나 디렉토리를 제외하는데 사용됩니다.
-v
rsync를 장황하게 만듭니다(선택 사항).
-a
rsync에 재귀적으로 복사하고 파일 속성을 보존하도록 지시합니다. 이는 선택 사항이지만 사용하지 않는 경우 재귀 복사를 -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