はい、簡単に ls
を作成できます 1 行に 1 つのファイル名を出力:
ls -a | cat
説明:コマンド ls
出力先が端末か、ファイルまたはパイプかを感知し、それに応じて調整します。
したがって、ls -a
をパイプすると Python では、特別な措置を講じなくても動作するはずです。
ls -1
を使用できます
ls -l
も仕事をします
-1
を使用 オプション (これは小文字の "L" ではなく "1" の数字であることに注意してください)、次のように:
ls -1a
ただし、最初に ls
を確認してください -1
をサポート . GNU coreutils (標準の Linux システムにインストールされています) と Solaris はそうです。疑問がある場合は、man ls
を使用してください または ls --help
またはドキュメントを確認してください。例:
$ man ls
...
-1 list one file per line. Avoid '\n' with -q or -b
Ls は人間が消費するように設計されており、その出力を解析しないでください。
シェル スクリプトでは、ls の出力の解析が目的の効果を実現する最も簡単な方法である場合がいくつかあります。 ls はファイル名に含まれる非 ASCII 文字や制御文字を破壊する可能性があるため、これらのケースは ls
からファイル名を取得する必要がないケースのサブセットです。 .
Python では、ls
を呼び出す理由はまったくありません。 . Python には ls
のすべてがあります の機能が組み込まれています。 os.listdir
を使用 ディレクトリと os.stat
の内容を一覧表示するには または os
ファイルのメタデータを取得します。 os
のその他の機能 モジュールも問題に関連している可能性があります。
ssh 経由でリモート ファイルにアクセスしている場合、ファイル名を一覧表示するかなり堅牢な方法は、sftp を使用することです:
echo ls -1 | sftp remote-site:dir
ls
とは異なり、これは 1 行に 1 つのファイル名を出力します。 ユーティリティ、sftp
印刷できない文字を壊しません。ファイル名に改行が含まれるディレクトリを確実に一覧表示することはまだできませんが、これはめったに行われません (これは、ユーザビリティの問題ではなく、潜在的なセキュリティの問題であることを覚えておいてください)。
Python の場合 (シェルのメタ文字は remote_dir
でエスケープする必要があることに注意してください ):
command_line = "echo ls -1 | sftp " + remote_site + ":" + remote_dir
remote_files = os.popen(command_line).read().split("\n")
より複雑なやり取りについては、ドキュメントで sftp のバッチ モードを参照してください。
一部のシステム (Linux、Mac OS X、その他のユニス、おそらく Windows ではない) では、sshfs を使用して ssh 経由でリモート ファイルシステムをマウントし、ローカルで作業するという別のアプローチがあります。