Générer la liste des fichiers d’un dossier sous Windows, Linux ou macOS

Générer la liste des fichiers présents dans un dossier peut servir à beaucoup de choses : archiver le contenu d’un disque, transmettre une liste de documents, comparer deux répertoires, préparer un inventaire, vérifier des extensions ou documenter une arborescence.

À l’époque, on faisait cela avec un fichier .bat et la commande dir. Cela fonctionne encore très bien. Cependant, sous Windows moderne, PowerShell offre une méthode plus propre, plus flexible et plus facile à exporter en TXT ou CSV.

Voici plusieurs méthodes pour générer une liste de fichiers sous Windows, Linux ou macOS, du plus simple au plus complet.

Méthode recommandée sous Windows : PowerShell

PowerShell est aujourd’hui la méthode la plus pratique sous Windows. La commande Get-ChildItem permet de lister les fichiers d’un dossier, de parcourir les sous-dossiers, de filtrer par extension, puis d’exporter le résultat dans un fichier texte ou CSV.

Ouvrez PowerShell, puis adaptez le chemin du dossier à analyser.

Lister les fichiers d’un dossier dans un fichier texte

Get-ChildItem -Path "C:\Temp" -File |
    Select-Object -ExpandProperty Name |
    Out-File -FilePath "C:\Temp\liste-fichiers.txt" -Encoding utf8Code language: JavaScript (javascript)

Cette commande crée un fichier liste-fichiers.txt contenant uniquement les noms des fichiers présents dans C:\Temp.

Elle ne liste pas les dossiers, seulement les fichiers, grâce au paramètre -File.

Lister les fichiers avec leur chemin complet

Get-ChildItem -Path "C:\Temp" -File |
    Select-Object -ExpandProperty FullName |
    Out-File -FilePath "C:\Temp\liste-fichiers-chemins.txt" -Encoding utf8Code language: JavaScript (javascript)

Cette version est plus utile si vous voulez garder une trace précise de l’emplacement de chaque fichier.

Exemple de résultat :

C:\Temp\document.pdf
C:\Temp\image.jpg
C:\Temp\archive.zipCode language: CSS (css)

Lister les fichiers d’un dossier et de tous ses sous-dossiers

Pour parcourir toute l’arborescence, ajoutez -Recurse.

Get-ChildItem -Path "C:\Temp" -File -Recurse |
    Select-Object -ExpandProperty FullName |
    Out-File -FilePath "C:\Temp\liste-fichiers-recursive.txt" -Encoding utf8Code language: JavaScript (javascript)

Cette commande liste tous les fichiers présents dans C:\Temp et dans ses sous-dossiers.

C’est souvent la commande la plus utile pour inventorier un dossier complet, un disque externe ou un répertoire de travail.

Limiter la profondeur de recherche

Si vous ne voulez pas parcourir toute l’arborescence, utilisez -Depth. Par exemple, pour descendre seulement sur deux niveaux :

Get-ChildItem -Path "C:\Temp" -File -Recurse -Depth 2 |
    Select-Object -ExpandProperty FullName |
    Out-File -FilePath "C:\Temp\liste-fichiers-depth-2.txt" -Encoding utf8Code language: JavaScript (javascript)

C’est pratique si votre dossier contient énormément de sous-répertoires. Vous évitez ainsi de créer une liste interminable. Parce qu’un fichier texte de 400 000 lignes, ça calme même les plus motivés.

Exporter la liste des fichiers en CSV

Pour ouvrir la liste dans Excel, LibreOffice Calc ou Google Sheets, le format CSV est plus adapté qu’un simple fichier texte.

Get-ChildItem -Path "C:\Temp" -File -Recurse |
    Select-Object Name, FullName, Extension, Length, LastWriteTime |
    Export-Csv -Path "C:\Temp\liste-fichiers.csv" -NoTypeInformation -Encoding utf8Code language: JavaScript (javascript)

Le fichier CSV contiendra plusieurs colonnes :

  • Name : nom du fichier ;
  • FullName : chemin complet ;
  • Extension : extension du fichier ;
  • Length : taille en octets ;
  • LastWriteTime : date de dernière modification.

C’est la meilleure méthode si vous voulez trier les fichiers par taille, extension, date ou dossier.

Exporter avec une taille lisible en Mo

La colonne Length indique la taille en octets. Pour un fichier plus lisible, vous pouvez ajouter une colonne calculée en mégaoctets.

Get-ChildItem -Path "C:\Temp" -File -Recurse |
    Select-Object Name,
                  FullName,
                  Extension,
                  @{Name="SizeMB"; Expression={[math]::Round($_.Length / 1MB, 2)}},
                  LastWriteTime |
    Export-Csv -Path "C:\Temp\liste-fichiers-tailles.csv" -NoTypeInformation -Encoding utf8Code language: PHP (php)

Cette commande ajoute une colonne SizeMB avec une taille arrondie à deux décimales.

Filtrer par extension

Pour ne lister que les fichiers PDF :

Get-ChildItem -Path "C:\Temp" -File -Recurse -Filter "*.pdf" |
    Select-Object Name, FullName, Length, LastWriteTime |
    Export-Csv -Path "C:\Temp\liste-pdf.csv" -NoTypeInformation -Encoding utf8Code language: JavaScript (javascript)

Pour lister seulement les images JPG :

Get-ChildItem -Path "C:\Temp" -File -Recurse -Filter "*.jpg" |
    Select-Object Name, FullName |
    Out-File -FilePath "C:\Temp\liste-jpg.txt" -Encoding utf8Code language: JavaScript (javascript)

Pour plusieurs extensions, utilisez Where-Object :

Get-ChildItem -Path "C:\Temp" -File -Recurse |
    Where-Object { $_.Extension -in ".jpg", ".jpeg", ".png", ".webp", ".gif" } |
    Select-Object Name, FullName, Extension |
    Export-Csv -Path "C:\Temp\liste-images.csv" -NoTypeInformation -Encoding utf8Code language: JavaScript (javascript)

Cette commande est utile pour auditer un dossier d’images, un export WordPress, une médiathèque ou un dossier de photos.

Distingo, le livret à 2%

Exclure certains dossiers

Si vous voulez ignorer certains dossiers, par exemple node_modules, vendor ou .git, utilisez un filtre sur le chemin complet.

Get-ChildItem -Path "C:\Projet" -File -Recurse |
    Where-Object {
        $_.FullName -notmatch '\\node_modules\\' -and
        $_.FullName -notmatch '\\vendor\\' -and
        $_.FullName -notmatch '\\.git\\'
    } |
    Select-Object Name, FullName, Extension, Length |
    Export-Csv -Path "C:\Projet\liste-fichiers-projet.csv" -NoTypeInformation -Encoding utf8Code language: PHP (php)

C’est indispensable sur les projets web modernes. Sinon, votre liste de fichiers devient surtout une ode à node_modules. Et personne n’a besoin de ça dans sa vie.

Créer un script PowerShell réutilisable

Si vous générez souvent des listes de fichiers, créez un script PowerShell. Par exemple, créez un fichier nommé generer-liste-fichiers.ps1.

param(
    [Parameter(Mandatory = $true)]
    [string] $Path,

    [Parameter(Mandatory = $false)]
    [string] $Output = "liste-fichiers.csv"
)

if (-not (Test-Path -Path $Path -PathType Container)) {
    Write-Error "Le dossier indiqué n'existe pas : $Path"
    exit 1
}

Get-ChildItem -Path $Path -File -Recurse |
    Select-Object Name,
                  FullName,
                  Extension,
                  @{Name="SizeMB"; Expression={[math]::Round($_.Length / 1MB, 2)}},
                  LastWriteTime |
    Export-Csv -Path $Output -NoTypeInformation -Encoding utf8

Write-Host "Liste générée : $Output"Code language: PHP (php)

Utilisation :

.\generer-liste-fichiers.ps1 -Path "C:\Temp" -Output "C:\Temp\liste-fichiers.csv"Code language: JavaScript (javascript)

Si PowerShell bloque l’exécution du script, lancez-le uniquement pour cette session avec :

Set-ExecutionPolicy -Scope Process -ExecutionPolicy BypassCode language: JavaScript (javascript)

Ensuite, relancez le script. Cette modification ne vaut que pour la fenêtre PowerShell en cours.

Méthode classique Windows : CMD et commande dir

Si vous voulez une solution rapide sans PowerShell, la commande dir fonctionne toujours dans l’invite de commandes Windows.

Ouvrez Invite de commandes, puis lancez :

dir "C:\Temp" /A-D /B > "C:\Temp\liste-fichiers.txt"Code language: JavaScript (javascript)

Explication des options :

  • /A-D exclut les dossiers ;
  • /B affiche uniquement les noms, sans en-tête ni résumé ;
  • > écrit le résultat dans un fichier.

Lister les fichiers récursivement avec CMD

Pour inclure les sous-dossiers, ajoutez /S :

dir "C:\Temp" /A-D /B /S > "C:\Temp\liste-fichiers-recursive.txt"Code language: JavaScript (javascript)

Cette commande génère une liste avec les chemins complets des fichiers.

Exemple :

C:\Temp\document.pdf
C:\Temp\Images\photo.jpg
C:\Temp\Archives\sauvegarde.zipCode language: CSS (css)

Créer un fichier batch pour générer la liste

La méthode historique consiste à créer un fichier .bat. Elle reste utile si vous voulez une action en double-clic.

Créez un fichier nommé liste-fichiers.bat, puis ajoutez :

@echo off
set "DOSSIER=C:\Temp"
set "SORTIE=C:\Temp\liste-fichiers.txt"

dir "%DOSSIER%" /A-D /B /S > "%SORTIE%"

echo Liste générée : %SORTIE%
pauseCode language: PHP (php)

Double-cliquez ensuite sur le fichier batch. Il générera la liste dans C:\Temp\liste-fichiers.txt.

Pour modifier le dossier analysé, changez simplement la variable DOSSIER.

Créer une liste dans le dossier courant avec batch

Si vous voulez placer le fichier batch dans n’importe quel dossier et lister son contenu, utilisez %~dp0, qui représente le dossier du script.

@echo off
set "DOSSIER=%~dp0"
set "SORTIE=%~dp0liste-fichiers.txt"

dir "%DOSSIER%" /A-D /B /S > "%SORTIE%"

echo Liste générée : %SORTIE%
pauseCode language: PHP (php)

Placez ce fichier .bat dans un dossier, lancez-le, et il créera une liste de tous les fichiers du dossier et de ses sous-dossiers.

Lister les fichiers sous Linux ou macOS

Sous Linux et macOS, la commande find est la méthode la plus flexible pour générer une liste de fichiers.

Pour lister tous les fichiers d’un dossier et de ses sous-dossiers :

find /home/matt/Documents -type f > liste-fichiers.txt

Pour générer la liste depuis le dossier courant :

find . -type f > liste-fichiers.txtCode language: CSS (css)

Pour lister uniquement les fichiers PDF :

find . -type f -name "*.pdf" > liste-pdf.txtCode language: CSS (css)

Pour ignorer certains dossiers, par exemple node_modules et .git :

find . \
  -path "./node_modules" -prune -o \
  -path "./.git" -prune -o \
  -type f -print > liste-fichiers.txtCode language: PHP (php)

Exporter une liste détaillée sous Linux ou macOS

Pour obtenir le chemin, la taille et la date de modification, utilisez find avec stat.

Sous Linux :

find . -type f -exec stat --format="%n,%s,%y" {} \; > liste-fichiers.csvCode language: JavaScript (javascript)

Sous macOS, la syntaxe de stat diffère :

find . -type f -exec stat -f "%N,%z,%Sm" {} \; > liste-fichiers.csvCode language: CSS (css)

Si vous avez besoin d’un CSV robuste avec des noms de fichiers contenant des virgules, espaces ou guillemets, préférez un petit script Python. Les noms de fichiers adorent les caractères gênants. Ils ont un vrai talent pour casser les exports naïfs.

Créer un CSV propre avec Python

Python permet de générer un CSV propre, multi-plateforme, avec échappement correct des colonnes. C’est souvent la meilleure solution si vous voulez un export fiable.

Créez un fichier liste-fichiers.py :

#!/usr/bin/env python3
from __future__ import annotations

import csv
import sys
from pathlib import Path
from datetime import datetime


def main() -> int:
    root = Path(sys.argv[1]).expanduser().resolve() if len(sys.argv) > 1 else Path.cwd()
    output = Path(sys.argv[2]).expanduser().resolve() if len(sys.argv) > 2 else Path("liste-fichiers.csv").resolve()

    if not root.is_dir():
        print(f"Erreur : dossier introuvable : {root}", file=sys.stderr)
        return 1

    with output.open("w", newline="", encoding="utf-8") as csv_file:
        writer = csv.writer(csv_file)
        writer.writerow(["name", "path", "extension", "size_bytes", "modified_at"])

        for file_path in root.rglob("*"):
            if not file_path.is_file():
                continue

            stat = file_path.stat()
            writer.writerow([
                file_path.name,
                str(file_path),
                file_path.suffix.lower(),
                stat.st_size,
                datetime.fromtimestamp(stat.st_mtime).isoformat(timespec="seconds"),
            ])

    print(f"Liste générée : {output}")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())Code language: JavaScript (javascript)

Utilisation sous Windows, Linux ou macOS :

python liste-fichiers.py "C:\Temp" "C:\Temp\liste-fichiers.csv"Code language: JavaScript (javascript)

Sous Linux ou macOS :

python3 liste-fichiers.py ~/Documents ~/liste-fichiers.csvCode language: JavaScript (javascript)

Cette méthode est idéale pour les exports propres, les gros dossiers et les inventaires destinés à être ouverts dans un tableur.

Quelle méthode choisir ?

BesoinMéthode recommandée
Liste rapide sous Windowsdir dans CMD
Liste Windows propre et filtrablePowerShell avec Get-ChildItem
Export CSV pour ExcelPowerShell avec Export-Csv
Double-clic sous WindowsFichier batch .bat
Linux ou macOSfind
CSV fiable multi-plateformePython
Très gros dossiersPowerShell ou Python selon le système

Pour Windows, je recommande PowerShell dans la plupart des cas. La commande dir reste parfaite pour une liste rapide, mais PowerShell devient bien meilleur dès que vous voulez des colonnes, des filtres, des tailles ou un export CSV.

Astuces utiles

Éviter les problèmes d’accents

Utilisez toujours un encodage UTF-8 dans vos exports PowerShell :

Out-File -Encoding utf8

ou :

Export-Csv -Encoding utf8

Cela évite les caractères accentués transformés en soupe typographique.

Éviter d’écraser une liste existante

Ajoutez la date et l’heure dans le nom du fichier :

$date = Get-Date -Format "yyyy-MM-dd-HHmm"
Get-ChildItem -Path "C:\Temp" -File -Recurse |
    Select-Object Name, FullName |
    Export-Csv -Path "C:\Temp\liste-fichiers-$date.csv" -NoTypeInformation -Encoding utf8Code language: JavaScript (javascript)

Vous gardez ainsi plusieurs exports sans les écraser.

Ouvrir directement le CSV après génération

Sous Windows, vous pouvez ouvrir le fichier généré avec :

Invoke-Item "C:\Temp\liste-fichiers.csv"Code language: JavaScript (javascript)

PowerShell lancera l’application associée au fichier CSV.

Cas pratique : inventorier un dossier de photos

Voici une commande PowerShell utile pour inventorier des photos et récupérer le nom, le chemin, l’extension, la taille et la date de modification.

Get-ChildItem -Path "D:\Photos" -File -Recurse |
    Where-Object { $_.Extension -in ".jpg", ".jpeg", ".png", ".webp", ".heic" } |
    Select-Object Name,
                  FullName,
                  Extension,
                  @{Name="SizeMB"; Expression={[math]::Round($_.Length / 1MB, 2)}},
                  LastWriteTime |
    Export-Csv -Path "D:\Photos\inventaire-photos.csv" -NoTypeInformation -Encoding utf8Code language: PHP (php)

Vous pouvez ensuite ouvrir inventaire-photos.csv dans Excel ou LibreOffice Calc pour trier les images par taille, extension ou date.

Cas pratique : lister les fichiers d’un projet web

Pour un projet web, il faut souvent ignorer les dépendances et dossiers techniques. Exemple sous PowerShell :

Get-ChildItem -Path "C:\Sites\mon-projet" -File -Recurse |
    Where-Object {
        $_.FullName -notmatch '\\node_modules\\' -and
        $_.FullName -notmatch '\\vendor\\' -and
        $_.FullName -notmatch '\\.git\\' -and
        $_.FullName -notmatch '\\cache\\'
    } |
    Select-Object Name, FullName, Extension |
    Export-Csv -Path "C:\Sites\mon-projet\liste-projet.csv" -NoTypeInformation -Encoding utf8Code language: PHP (php)

C’est utile pour auditer un projet avant migration, livraison ou archivage.

Dépannage

PowerShell refuse d’exécuter le script

Utilisez une autorisation temporaire pour la session courante :

Set-ExecutionPolicy -Scope Process -ExecutionPolicy BypassCode language: JavaScript (javascript)

Relancez ensuite le script dans la même fenêtre PowerShell.

Le fichier généré est vide

Vérifiez le chemin du dossier et les permissions. Testez d’abord sans export :

Get-ChildItem -Path "C:\Temp" -FileCode language: JavaScript (javascript)

Si rien ne s’affiche, le dossier ne contient peut-être pas de fichiers directs. Essayez avec -Recurse.

Les accents sont mal affichés dans Excel

Utilisez -Encoding utf8. Si Excel détecte mal le fichier, importez le CSV via l’assistant d’import plutôt que par double-clic.

La commande est trop lente

Sur un très gros dossier, évitez de parcourir toute l’arborescence si ce n’est pas nécessaire. Utilisez -Depth, filtrez par extension avec -Filter, ou excluez les dossiers volumineux comme node_modules, vendor, .git et les caches.

À retenir

Pour générer une liste de fichiers sous Windows, PowerShell est aujourd’hui la méthode la plus propre. Utilisez Get-ChildItem pour lister les fichiers, -Recurse pour inclure les sous-dossiers, puis Out-File ou Export-Csv pour créer un fichier exploitable.

La commande dir et les fichiers batch restent utiles pour une solution rapide en double-clic. Sous Linux et macOS, find fait très bien le travail. Et pour un export CSV fiable sur tous les systèmes, Python reste le choix le plus robuste.

Le plus important : choisissez la méthode selon le résultat attendu. Une simple liste de noms ne demande pas le même outil qu’un inventaire complet avec chemins, tailles, dates et extensions. Sinon, on finit toujours par bricoler dans Excel à 23h42. Mauvais plan.

FAQ : générer une liste de fichiers

Comment générer une liste de fichiers sous Windows ?

Utilisez PowerShell avec Get-ChildItem. Par exemple : Get-ChildItem -Path "C:\Temp" -File | Select-Object -ExpandProperty Name | Out-File "C:\Temp\liste.txt".

Comment lister les fichiers et les sous-dossiers ?

Ajoutez le paramètre -Recurse avec PowerShell : Get-ChildItem -Path "C:\Temp" -File -Recurse.

Comment exporter la liste dans Excel ?

Exportez en CSV avec Export-Csv. Exemple : Get-ChildItem -Path "C:\Temp" -File -Recurse | Select-Object Name,FullName,Length | Export-Csv "liste.csv" -NoTypeInformation -Encoding utf8.

Peut-on encore utiliser un fichier .bat ?

Oui. Un fichier batch avec dir "%DOSSIER%" /A-D /B /S > liste.txt fonctionne encore très bien pour une liste simple.

Comment générer une liste de fichiers sous Linux ou macOS ?

Utilisez find. Exemple : find . -type f > liste-fichiers.txt.

Comment filtrer par extension ?

Sous PowerShell, utilisez -Filter "*.pdf" pour une extension simple, ou Where-Object pour plusieurs extensions.

Articles liés

Sources

Demandez à l'IA son opinion
Gravatar for Matt Biscay

Je suis Matt Biscay, développeur WordPress & WooCommerce certifié chez Codeable, administrateur système et enseignant.

J’aide les entreprises à créer, optimiser et fiabiliser leurs sites WordPress avec une approche technique propre : performance, sécurité, maintenance, développement sur mesure et résolution de problèmes complexes.

Sur Skyminds, je partage des tutoriels WordPress, WooCommerce, Linux et administration système, avec des solutions testées sur des cas réels et pensées pour durer.

Découvrez mes services WordPress et WooCommerce.

13 pensées sur “Générer la liste des fichiers d’un dossier sous Windows, Linux ou macOS”

  1. Ça marche super. Merci pour le truc.
    Juste deux remarques : il prend aussi les répertoires, ce qui me plait.
    Il n’aime pas les accents en tous les cas sur mon poste de travail.

    Reply
  2. agat’, tu a des accents dans tes noms de fichiers/dossiers ? C’est un peu étrange non ?
    J’ai gardé la vieille nomenclature 8.3 pour les noms de fichiers.

    Reply
  3. Et la commande tree ?

    Affiche graphiquement la structure de dossiers d’un lecteur ou d’un chemin.

    TREE [lecteur:][chemin] [/F] [/A]

    /F Affiche le nom des fichiers de chaque répertoire.
    /A Utilise ASCII au lieu des caractères étendus.

    Avec une redirection comme tu l’indiques vers un fichier txt…

    Reply
    • Bjr ! L’opération fonctionne. Mais je tente avec des fichiers ayant des caractères russes ou hébreux. Du coup là non ^^ Que faire?
      J’ai les langues installée sur PC windows10, les utilise dans les logiciels normalement, et ais même essayer la commande /a /o:gen > liste.doc pour que ça ressorte sur word. Mais le résultat est mauvais, je n’ai que des ???? à la place des lettres russes.

      Reply
  4. Ah excellent BoZo ! Je n’avais encore jamais utilisé TREE, c’est vraiment pas mal d’avoir l’arborescence en plus. Je vais le rajouter à l’article.

    Reply
  5. @ Matt : c’est XP qui m’a créé ce dossier avec des accents … et oui j’en ai parfois, en français il arrive que ce soit utile :-)

    Sinon pour la deuxième commande, j’ai du la modifier car ça ne marchait pas sur mon poste (au boulot). Et pour rester homogène, si j’étais toi je mettrai un chemin dans les deux exemples ou pas du tout, ce serait plus cohérent. J’ai du m’y reprendre à deux fois pour voir que c’était \C qui était “visé” dans le 2ème.
    Donc j’ai modifié le script en conséquence et ça marche très bien.

    Effectivement ce sont deux petits bat à garder sous le coude.
    Tu en as d’autres à partager comme ça ?

    Reply
  6. @agatzebluz : Pour que tu retrouves tes accents tels qu’ils étaient, il suffit d’ouvrir le fichier .txt avec Word et lui dire d’utiliser l’encodage MS-DOS, et c’est réglé.

    Reply
  7. Oups…il suffit que je poste ça pour me rendre compte que ça fonctionne en fait, j’avais juste pas vu que le fichier était créé à la racine de C alors que je le cherchais dans le même dossier…désolé !

    Reply
  8. Super, c’est presque pile poil ce que je cherchais. En tout cas ça me sort une grosse épine du pied.
    J’aurais voulu savoir s’il existait un moyen d’obtenir la taille des fichiers listés dans le fichier texte généré?
    Encore merci ;)

    Reply
  9. Salut !

    Pour lister plus efficacement et sans problème d’accentuation un répertoire je vous propose d’essayer mon application Windows “Lister un dossier“.

    Cela fait un petit peu plus d’un mois que je travail dessus et je l’améliore en permanence mais c’est mon tout premier projet de programmation alors n’hésitez pas à me signaler des bugs si vous en voyez !

    ++

    Reply

Opinions