diff -r 073ff46fe397 -r dabd14d2a4ce src/os_win32.c
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -2273,12 +2273,14 @@
     int		len)
 {
     char		szTrueName[_MAX_PATH + 2];
+    char		szTrueNameTemp[_MAX_PATH + 2];
     char		*ptrue, *ptruePrev;
     char		*porig, *porigPrev;
     int			flen;
     WIN32_FIND_DATA	fb;
     HANDLE		hFind;
     int			c;
+    int			slen;
 
     flen = (int)STRLEN(name);
     if (flen == 0 || flen > _MAX_PATH)
@@ -2323,12 +2325,22 @@
 	}
 	*ptrue = NUL;
 
+	/* To avoid slow file open on network, append \* if searching a
+	 * directory, server, or network share. */
+	STRCPY(szTrueNameTemp, szTrueName);
+	slen = strlen(szTrueNameTemp);
+	if (*porig == psepc && slen + 2 < _MAX_PATH) {
+	    szTrueNameTemp[slen+0] = '\\';
+	    szTrueNameTemp[slen+1] = '*';
+	    szTrueNameTemp[slen+2] = NUL;
+	}
+
 	/* Skip "", "." and "..". */
 	if (ptrue > ptruePrev
 		&& (ptruePrev[0] != '.'
 		    || (ptruePrev[1] != NUL
 			&& (ptruePrev[1] != '.' || ptruePrev[2] != NUL)))
-		&& (hFind = FindFirstFile(szTrueName, &fb))
+		&& (hFind = FindFirstFile(szTrueNameTemp, &fb))
 						      != INVALID_HANDLE_VALUE)
 	{
 	    c = *porig;
