Dateilisten für Projekte erzeugen

Bei größeren Projekten will man manchmal wissen, welche Dateien (eines bestimmten Typs) sich im Projektverzeichnis befinden. Dafür gibt es hier je eine schnelle Lösung für Windows und Linux. Natürlich nur mit Bordmitteln.

Win+R_cmd

Auf Bilder klicken, um zu vergrößern.

1. Für Windows

Die Lösung geht über die Kommandozeile, zumindest ein Mal – man könnte die Befehle auch in einer Batch-Datei ablegen und zukünftig den Ordner, in dem Dateien gelistet werden sollen, auf die .bat ziehen. Die Kommandozeile öffnen wir mit Windows+R, der Eingabe von cmd und OK. Mit dem Befehl cd bewegen wir uns dann zum Pfad des Projektverzeichnisses, z.B. cd C:\Users\Benutzername\Documents\Projekte\test (oder so).

Es gibt allerdings einen einfacheren Weg: Wir rufen mit Windows+E den Explorer auf und öffnen unser “Projekte”-Verzeichnis – also das Verzeichnis 1 Ebene über dem Verzeichnis, in das wir eigentlich wollen. Dann halten wir die Umschalt-Taste gedrückt und rechtsklicken auf das gewünschte Projektverzeichnis. Im Kontextmenü erscheint dann der neue Eintrag Eingabeaufforderung hier öffnen. Dann öffnet sich die Kommandozeile gleich dort, wo wir hinwollen. Win+E -> Alt+Rechtsklick auf Verzeichnis => cmd öffnet im Verzeichnis

Auf der Kommandozeile angekommen, zeigt uns der Befehl dir den Verzeichnisinhalt mit Datum, Uhrzeit, Dateigröße und Dateinamen, sowie die Anzahl der Verzeichnisse und Dateien. Für einen ersten Blick reicht das, aber jetzt kommt die Kür: Mit der Optionen /B erhalten wir eine einfache Liste von Dateien, 1 Datei pro Zeile. Und weil wir vielleicht nur bestimmte Dateien im Projektordner in unserer Übersicht wollen, können wir einen Filter setzen, z.B. *.txt für Textdateien, *.docx für Word-Dateien, etc. Der Befehl in Gänze: dir /B *.pdf

Kommandozeile: dir /B *.pdf

Windows kann zwar mit der dir-Option /S auch alle Unterverzeichnisse mit in die Suche einbeziehen, gibt dann aber im Gegensatz zu Linux selbst mit der oben genannten Option /B für jede Datei den kompletten Pfad mit an. Dies verschlechtert die Übersichtlichkeit bei langen Pfaden enorm. Probieren Sie es einfach aus: dir /S /B

Jetzt sind wir soweit, diese Ausgabe für uns nutzbar zu machen. Wir leiten sie nämlich in eine Textdatei um. Das geht ganz einfach, indem man hinter den gewünschten Befehl das “Größer als”-Zeichen setzt, gefolgt vom gewünschten Dateinamen: dir /B *.pdf > pdf-dateiliste.txt Diese Textdatei enthält dann unsere Dateiliste, die wir weiterverwenden können, z.B. um sie in unser Angebot oder die Rechnung zu kopieren oder um in der Textdatei (oder einer Excel-Tabelle) unsere Arbeitszeit je Datei zu erfassen. Mit den erfassten Zeiten können wir z.B. am Ende prüfen, ob unser effektiver Stundenlohn stimmt, ob wir den Zeilenpreis erhöhen müssen oder ob wir stattdessen Luft für Rabatte haben. Außerdem hilft uns das, Kunden in Zukunft zuverlässiger sagen zu können, wie viel Zeit ein Auftrag von dieser Größe vermutlich benötigen wird.

Wenn wir auch eine Textdatei brauchen, in der die Anzahl der Dateien erfasst ist, können wir diese mit DIR /A-D /B | FIND /C /V "" für das aktuelle Verzeichnis erfassen und mit DIR /A-D /B /S | FIND /C /V "" für das derzeitige Verzeichnis plus aller Unterverzeichnisse. Beide Befehle können wie oben mit > dateianzahl.txt in eine Datei umgeleitet und für später gespeichert werden.

Mehr Tricks für die Kommandozeile finden Sie zum Beispiel hier auf Englisch.


2. Für Linux

Linuxbenutzer öffnen das Gegenstück zur Windows-Kommandozeile, eine Shell bzw. ein Terminal (z.B. per F12 für Guake), wechseln mit cd ~/projekte/test ins Projektverzeichnis und lassen sich mit ls den Inhalt ausgeben.

Linux: ls -1p und ls -1pR mit Unterverzeichnissen Damit daraus etwas Vergleichbares wie oben beschrieben wird, benötigen wir zwei Optionen: -1 (die Zahl 1, nicht der Buchstabe l) listet nur eine Datei pro Zeile auf, anstatt die Ausgabe in mehreren Spalten anzuordnen und -p markiert Verzeichniseinträge durch einen angehängten / Schrägstrich.

Vorsicht: Die Optionsbuchstaben sind “case sensitive”, d.h. man muss auf Groß- und Kleinschreibung achten! Dafür muss man unter Linux nicht jede Option einzeln anfügen, sondern kann sie nach einem Minuszeichen zusammenschreiben.

Wie bei Windows können wir am Ende *.xyz anhängen, um nach bestimmten Dateitypen zu filtern, z.B. *.txt (Textdateien) oder *.odt (OpenDocument-Dateien). Das sieht dann so aus: ls -1p *.txt Weitere interessante Optionen sind -R, dann arbeitet ls rekursiv, das heißt, es bezieht die Unterverzeichnisse in die Auflistung mit ein; -B ignoriert Backup-Dateien (solche, die mit Tilde ~ anfangen).

Leider gibt es keine einfache Option, ls am Ausgeben von Verzeichnissen zu hindern, ls -p pfad/ | grep -Ev '/' nutzt das Tool grep, um den mit der ls-Option -p an Verzeichnisse angehängten Schrägstrich zu finden und diese auszufiltern.

Jetzt müssen wir die Ausgabe nur noch, wie bei Windows, in eine Datei umleiten: ls -1pRB *.txt | grep -Ev '/' > ./dateiliste.txt

Die Anzahl der Dateien kann man festhalten, indem man die Ausgabe von ls mit einer Pipe an wc übergibt, bevor man sie an eine Datei weiterleitet: ls -p | grep -Ev '/' | wc -l > ./dateianzahl.txt

Mehr Tricks für die Konsole finden Sie zum Beispiel hier auf Englisch.

Christopher Köbel

IT / IT-Marketing / Tech in DE / FR / EN defrent.de | XING Profil

Veröffentlicht in Deutsche Beiträge, Howtos in Deutsch Getagged mit: , , ,
Ein Kommentar zu “Dateilisten für Projekte erzeugen
  1. Today, I was a bit put off by CMD to not display non-ASCII characters correctly. It looks as if PowerShell can take care of this:

    To create one file.txt with all specified files in all subfolders, do
    dir .\ -include *.pdf -recurse | Select -exp Name > .\filelist.txt
    Replace .\ with a folder path if you are not in the folder you want to list files in. Replace *.pdf with the relevant filetype or with *.* for all files.

    To create a separate $foldername.txt in each $folder (and subfolder), see http://stackoverflow.com/questions/24284267/powershell-script-to-export-a-list-of-file-names-only-with-no-file-extension-the/24716784#24716784.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*