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.