디렉토리 계층 구조(파일 생략)를 다른 디렉토리에 복사하는 방법은 무엇입니까?

디렉토리 계층 구조(파일 생략)를 다른 디렉토리에 복사하는 방법은 무엇입니까?

다른 디렉토리에 복사하고 싶은 하위 디렉토리가 있는 디렉토리가 있습니다. 나의 현재 순진한 접근 방식은 다음과 같습니다.

find src_dir -type d -exec mkdir -p dest_dir/{} \;

작동하지만 많은 중복 mkdir호출을 순서대로 수행합니다.

참고로 다음을 시도했습니다.

# real fast
find src_dir -type d >/dev/null
# also real fast
find src_dir -type d -exec true {} +
# slower, but not as slow as mkdir
find src_dir -type d -exec true {} \;

중복성이 적고 exec 호출이 적은 더 좋은 방법이 있습니까?

답변1

rsync 및 필터링(-f)을 사용하면 다음과 같이 디렉터리를 필터링하고 다른 모든 항목을 필터링할 수 있습니다.

rsync -av -f "+ */" -f "- *" src_dir/ new_dir/

답변2

;+로 변경하여 find ... -exec프로세스 호출 수를 줄일 수 있습니다. 이 상황에서는 작은 셸 조각을 사용하여 전달될 디렉터리 목록을 펼쳐야 합니다.

find src_dir -type d -exec bash -c 'echo cd "$0" && echo mkdir -p "$@"' dest_dir {} +

echo예상대로 작동할 것이라고 확신하는 두 가지 인스턴스를 제거하세요 . (특히 로 끝날 것이라는 점에 유의하십시오 dest_dir/src_dir/.... 이를 원하지 않으면 대신 이 유형의 구성을 사용하고 dest_dir절대 경로로 다시 작성되었는지 확인하십시오):

cd src_dir && find -type d ...

관련 정보