Ja, Sie können ganz einfach ls
erstellen einen Dateinamen pro Zeile ausgeben:
ls -a | cat
Erläuterung:Der Befehl ls
erkennt, ob die Ausgabe an ein Terminal oder an eine Datei oder Pipe erfolgt und passt sich entsprechend an.
Also, wenn Sie ls -a
leiten Für Python sollte es ohne besondere Maßnahmen funktionieren.
Sie können ls -1
verwenden
ls -l
wird auch die Arbeit erledigen
Verwenden Sie den -1
Option (beachten Sie, dass dies eine "Eins"-Ziffer ist, kein Kleinbuchstabe "L"), etwa so:
ls -1a
Stellen Sie jedoch zuerst sicher, dass Sie ls
haben unterstützt -1
. GNU Coreutils (installiert auf Standard-Linux-Systemen) und Solaris tun es; Verwenden Sie im Zweifelsfall man ls
oder ls --help
oder überprüfen Sie die Dokumentation. Beispiel:
$ man ls
...
-1 list one file per line. Avoid '\n' with -q or -b
Ls ist für den menschlichen Gebrauch konzipiert, und Sie sollten seine Ausgabe nicht parsen.
In Shell-Skripten gibt es einige Fälle, in denen das Analysieren der Ausgabe von ls funktioniert, um den gewünschten Effekt am einfachsten zu erzielen. Da ls Nicht-ASCII-Zeichen und Steuerzeichen in Dateinamen verstümmeln kann, sind diese Fälle eine Teilmenge der Fälle, die keinen Dateinamen von ls
benötigen .
In Python gibt es absolut keinen Grund, ls
aufzurufen . Python hat alle ls
's Funktionalität eingebaut. Verwenden Sie os.listdir
um den Inhalt eines Verzeichnisses aufzulisten und os.stat
oder os
um Datei-Metadaten zu erhalten. Weitere Funktionen im os
Module sind wahrscheinlich auch für Ihr Problem relevant.
Wenn Sie über ssh auf entfernte Dateien zugreifen, ist sftp:
eine einigermaßen robuste Methode zum Auflisten von Dateinamenecho ls -1 | sftp remote-site:dir
Dies gibt einen Dateinamen pro Zeile aus, und im Gegensatz zu ls
Dienstprogramm, sftp
verstümmelt keine nicht druckbaren Zeichen. Sie werden immer noch nicht in der Lage sein, Verzeichnisse zuverlässig aufzulisten, in denen ein Dateiname einen Zeilenumbruch enthält, aber das wird selten gemacht (denken Sie daran, dass dies ein potenzielles Sicherheitsproblem ist, kein Problem der Benutzerfreundlichkeit).
In Python (beachten Sie, dass Shell-Metazeichen Escapezeichen in remote_dir
sein müssen ):
command_line = "echo ls -1 | sftp " + remote_site + ":" + remote_dir
remote_files = os.popen(command_line).read().split("\n")
Schlagen Sie für komplexere Interaktionen den Stapelmodus von sftp in der Dokumentation nach.
Auf einigen Systemen (Linux, Mac OS X, vielleicht einige andere Unices, aber definitiv nicht Windows) besteht ein anderer Ansatz darin, ein Remote-Dateisystem über ssh mit sshfs zu mounten und dann lokal zu arbeiten.