GNU/Linux >> Linux の 問題 >  >> Linux

Linux で出力行ごとに 1 つのファイル名をリストするにはどうすればよいですか?

はい、簡単に 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 経由でリモート ファイルシステムをマウントし、ローカルで作業するという別のアプローチがあります。


Linux
  1. Linuxでコマンド出力をファイルに保存する方法

  2. Linuxでファイルのパーミッションと所有権を別のファイルにコピーする方法

  3. Linux – Unix / linuxファイルのディレクトリ構造情報をどのように検査しますか?

  1. UNIX/Linux でファイルの行数を数える方法

  2. Linuxでjar内のファイルをコマンドラインに置き換える方法は?

  3. Linux でファイルのデータ ブロックを一覧表示するにはどうすればよいですか?

  1. コマンドラインを使用してLinuxでtar.gzファイルを抽出する方法

  2. Linuxでテキストファイルに行番号を追加する方法

  3. Linuxで出力をファイルとStdoutにリダイレクトする方法