--- a/src/scanner.c Sun Nov 10 14:06:03 2024 +0100 +++ b/src/scanner.c Mon Apr 07 20:43:52 2025 +0200 @@ -199,27 +199,29 @@ /* Scan subdirectories */ if (!S_ISREG(filelist->st_mode)) { - if (settings->recursive && S_ISDIR(filelist->st_mode)) { - string_list_t *recoutput = new_string_list_t(); - scanresult_t recresult; - recresult.ext = result->ext; - scanDirectory( - (scanner_t) {filelist->filename, scanner.spaces+1}, - settings, recoutput, &recresult); - result->result += recresult.result; - if (!settings->matchesOnly || recoutput->count > 0) { - outbuf = (char*) malloc(81); - snprintf(outbuf, 81, "%*s/%*s%13u %s\n", - filelist->displayname_len+scanner.spaces, filelist->displayname, - 60-filelist->displayname_len-scanner.spaces-1, "", - recresult.result, result_type); - add_string(output, outbuf); - for (unsigned i = 0 ; i < recoutput->count ; i++) { - add_string(output, recoutput->items[i]); + if (S_ISDIR(filelist->st_mode)) { + if (settings->recursive) { + string_list_t *recoutput = new_string_list_t(); + scanresult_t recresult; + recresult.ext = result->ext; + scanDirectory( + (scanner_t) {filelist->filename, scanner.spaces+1}, + settings, recoutput, &recresult); + result->result += recresult.result; + if (!settings->matchesOnly || recresult.result > 0) { + outbuf = (char*) malloc(81); + snprintf(outbuf, 81, "%*s/%*s%13u %s\n", + filelist->displayname_len+scanner.spaces, filelist->displayname, + 60-filelist->displayname_len-scanner.spaces-1, "", + recresult.result, result_type); + add_string(output, outbuf); + for (unsigned i = 0 ; i < recoutput->count ; i++) { + add_string(output, recoutput->items[i]); + } } + destroy_string_list_t(recoutput); } - destroy_string_list_t(recoutput); - } else { + } else if (!settings->matchesOnly) { outbuf = (char*) malloc(81); snprintf(outbuf, 81, "%*s\n", filelist->displayname_len+scanner.spaces, @@ -288,7 +290,7 @@ /* Print and sum line count */ if (bfile) { - if (!settings->matchesOnly) { + if (!settings->matchesOnly && !settings->dirsOnly) { outbuf = (char*) malloc(81); snprintf(outbuf, 81, "%*s%*s%19s\n", filelist->displayname_len+scanner.spaces, @@ -299,20 +301,22 @@ } else { addResultPerExtension(result->ext, filelist->ext, res_value); result->result += res_value; - outbuf = (char*) malloc(81); - snprintf(outbuf, 81, "%*s%*s%13u %s\n", - filelist->displayname_len+scanner.spaces, - filelist->displayname, - 60-filelist->displayname_len-scanner.spaces, - "", - res_value, - result_type - ); - add_string(output, outbuf); + if (!settings->dirsOnly) { + outbuf = (char*) malloc(81); + snprintf(outbuf, 81, "%*s%*s%13u %s\n", + filelist->displayname_len+scanner.spaces, + filelist->displayname, + 60-filelist->displayname_len-scanner.spaces, + "", + res_value, + result_type + ); + add_string(output, outbuf); + } } } } else { - if (!settings->matchesOnly) { + if (!settings->matchesOnly && !settings->dirsOnly) { /* Print hint */ outbuf = (char*) malloc(81); snprintf(outbuf, 81, "%*s%*s%19s\n",