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

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

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

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 ...

관련 정보