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