Construct a list L that contains all filenames that have the extension ".jpg" , ".jpeg" or ".png" in directory D and all its subdirectories.
New implementation

Be concise.

Be useful.

All contributions dictatorially edited by webmasters to match personal tastes.

Please do not paste any copyright violating material.

Please try to avoid dependencies to third-party libraries and frameworks.

Other implementations
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
string D = @"C:\The\Search\Path";

// Assumes that the file system is case insensitive
HashSet<string> exts = new HashSet<string>(StringComparer.CurrentCultureIgnoreCase) { "jpg", "jpeg", "png" };
IEnumerable<string> L =
    .EnumerateFiles(D, "*", SearchOption.AllDirectories)
    .Where(currentFile => exts.Contains(Path.GetExtension(currentFile)));
import std.algorithm;
import std.conv;
import std.file;
immutable exts = ["jpg", "jpeg", "png"];
auto L = D.dirEntries(SpanMode.depth)
          .filter!(f => exts.canFind(f.split(".")[$-1]));
import 'dart:io';
import 'package:path/path.dart' as p;
var extensions = [".jpg", "jpeg", ".png"];
var L = Directory(D)
    .listSync(recursive: true)
    .where((file) => extensions.contains(p.extension(file.path)))
import "path/filepath"
import "strings"
L := []string{}
err := filepath.Walk(D, func(path string, info os.FileInfo, err error) error {
	if err != nil {
		fmt.Printf("failure accessing a path %q: %v\n", path, err)
		return err
	for _, ext := range []string{".jpg", ".jpeg", ".png"} {
		if strings.HasSuffix(path, ext) {
			L = append(L, path)
	return nil
import java.io.File;
import java.util.ArrayList;
public static ArrayList<String> findFiles(String D)
	File fileDirectory = new File(D);
	ArrayList<String> L = new ArrayList<>();
	String fileName = null;
	for(File file : fileDirectory.listFiles()) {
		fileName = file.getName();
		if(fileName.endsWith(".jpg") || fileName.endsWith(".jpeg") || fileName.endsWith(".png")) {
	return L;
uses FileUtil;
L := FindAllFiles(D, '*.jpg;*.jpeg;*.png', True);
use File::Find;
my @L;
find(sub {
  push @L, $File::Find::name
     if /(.jpg|.jpeg|.png)$/;
}, $D);

import os
extensions = [".jpg", ".jpeg", ".png"]
L = [f for f in os.listdir(D) if os.path.splitext(f)[1] in extensions]
import re
import os
filtered_files = ["{}/{}".format(dirpath, filename) for dirpath, _, filenames in os.walk(D) for filename in filenames if re.match(r'^.*\.(?:jpg|jpeg|png)$', filename)]
import glob
import itertools
list(itertools.chain(*(glob.glob("*/**.%s" % ext) for ext in ["jpg", "jpeg", "png"])))
import glob
import os
extensions = [".jpg", ".jpeg", ".png"]
L = [f for f in glob.glob(os.path.join(D, "**/*"), recursive=True) if os.path.splitext(f)[1] in extensions]
L = Dir.glob(File.join("**", "*.{jpg,jpeg,png}"), base: D)
use std::path::{Path, PathBuf};
let d = Path::new("/path/to/D");
let l: Vec<PathBuf> = d
    .filter_map(|f| f.ok())
    .filter(|f| match f.path().extension() {
        None => false,
        Some(ex) => ex == "jpg" || ex == "jpeg" || ex == "png"
    .map(|f| f.path())