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