Agregue la columna "nombre de archivo" a la tabla a medida que se leen y enlazan varios archivos

Tengo numerosos archivos csv en múltiples directorios que quiero leer en una tribble R o data.table. Uso "list.files ()" con el argumento recursivo establecido en TRUE para crear una lista de nombres de archivos y rutas, luego uso "lapply ()" para leer en múltiples archivos csv y luego "bind_rows ()" los pega a todos juntos:

filenames <- list.files(path, full.names = TRUE, pattern = fileptrn, recursive = TRUE)
tbl <- lapply(filenames, read_csv) %>% 
  bind_rows()

Este enfoque funciona bien. Sin embargo, necesito extraer una subcadena del nombre de cada archivo y agregarla como una columna a la tabla final. Puedo obtener la subcadena que necesito con "str_extract ()" así:

sites <- str_extract(filenames, "[A-Z]{2}-[A-Za-z0-9]{3}")

Sin embargo, estoy atascado en cómo agregar la subcadena extraída como una columna, ya que lapply () se ejecuta a través de read_csv () para cada archivo.