lsコマンドで生成されたすべてのファイルを開くにはどうすればよいですか?

lsコマンドで生成されたすべてのファイルを開くにはどうすればよいですか?

テキストエディタを使用してlsコマンドで生成されたすべてのテキストファイルを開きたいです。どうすればいいですか?

答え1

ザイルズは絶対に正しいls非常に悪い例です。ファイル名のグローバル拡張は、!を使用せずにコマンドラインではるかに簡単に実行できるためですls。いわゆる「テキストファイル」にそのファイルを識別できるファイル拡張子がある場合は、次のことができます。

editor-command *.txt

技術を実証するために、ファイル名のマッチングだけでは実行できないより複雑な例を使用し、名前だけではなくコンテンツに基づいてファイルを開いてみましょう。 「content-type」文字列を含むすべてのファイルを開きたいとします。

エディタが複数のファイル名を受け入れ、それを別々のバッファで一度に開くか、順番に処理すると仮定すると、以下を簡単に実行できます。

editor-command $(grep -i content-type)

それでは、元の質問に戻り、名前に基づいたテキストファイルかどうかを知らないとしましょう。その後、他のプログラムを使用してそのデータに基づいて識別して開く必要があります。プログラムはfile特定のファイルの種類を知らせます。リストを検索してテキストファイルのみを検索し、次のように一致するファイル名のみを開くことができます。

editor-command $(file -ni * | grep 'text/plain' | cut -d: -f1)

コンフィギュレーション内のコマンドチェーン出力は$()エディタの引数として使用されます。私は時々2段階でこれを行います。ファイルセットを見て、「content-type」文字列を含む各xmlファイルのリストを取得したとします。

find -type f -iname '*xml' | xargs grep -Hi 'content-type' |  cut -d: -f1

...そして開いてみることにしました。次に、最後のコマンド履歴ショートカットを使用して、次の操作を行います。

vim $(!!)

...私のお気に入りのエディタ、vimで前のコマンドのすべての結果を開きます。

xargsエディタが一度に1つのファイルのみを受け入れてエディタを作成する必要がある場合、またはループのバリエーションを使用する必要がありforます。jmtdの答えstdioが必要な端末ベースのエディタを使用しているかどうかによって異なります。

答え2

現在のディレクトリでSomethingという名前の.txtすべてのファイルを開くには、次の手順を実行します。*.txt

$EDITOR *.txt

、、または何でも$EDITOR好きなエディタはどこにありますか?現在のディレクトリ内のすべてのファイルを一致させるには、justを使用してください。gedit *.txtnano *.txtvim *.txtemacs *.txt*

lsこのコマンドは関係ありません。lsディレクトリから呼び出すときに発生しても、実際にはファイルのリストは表示されません。これが便利なのは、lsファイルのプロパティ(変更時間、権限、サイズなど)を表示することです。特定のワイルドカードパターンに一致する複数のファイルに対していくつかの操作を実行するには十分でしょう。

十分に進化したエディタを使用すると、内部でこれを行うことができます。たとえば、Emacsは通常のファイルを開くコマンド(C-x C-f)を使用します*.txt

zshまたはbash≥4のサブディレクトリにあるファイルも一致させるには$EDITOR **/*.txt

答え3

これは、テキストエディタの微妙な違いによって異なります。高度なエディタは、単一インスタンスのコマンドラインから複数のファイルを開くことを処理できます。ただし、たとえば、エディタ(以下の例の$ EDITOR)は一度に1つだけ開くことができます。適切な出力findxargs

find . -maxdepth 1 -type f -name '*.c' -print0 | xargs -r0n 1 $EDITOR

コンソールエディタを使用する場合は、シェルループがより適している可能性がありますが、異常なファイル名が多く、失敗した場合(空白文字やその他のさまざまな項目を折りたたんだり置き換えたり):

for i in *.c; do $EDITOR "$i"; done

関連情報