diff --git a/lib/fs.js b/lib/fs.js
index <HASH>..<HASH> 100644
--- a/lib/fs.js
+++ b/lib/fs.js
@@ -217,7 +217,7 @@ function _readAndFilterDirSync(path, options) {
 }
 
 function _copyDir(src, dest, options = {}, parent = '') {
-  return checkParent(dest).then(() => _readAndFilterDir(src, options))
+  return _readAndFilterDir(src, options)
     .map(item => {
       const childSrc = item.fullPath;
       const childDest = join(dest, item.path);
@@ -240,7 +240,7 @@ function copyDir(src, dest, options, callback) {
     options = {};
   }
 
-  return _copyDir(src, dest, options).asCallback(callback);
+  return checkParent(dest).then(() => _copyDir(src, dest, options)).asCallback(callback);
 }
 
 function _listDir(path, options = {}, parent = '') {
Exclude checkParent() in copyDir() from recursive function.
Just by calling checkParent() once, directories up to their parents have been created and it is not necessary to put them in recursion.