テキストエディターを使用してlsコマンドの結果であるすべてのテキストファイルを開きたいのですが。どうすればよいですか?
テキストエディターを使用してlsコマンドの結果であるすべてのテキストファイルを開きたいのですが。どうすればよいですか?
回答:
ジルは正確に右され、ls
ファイル名のグロブ展開を使用せずに、コマンドライン上で非常に簡単に行うことができるので、本当に悪い例ですls
すべてで!いわゆる「テキストファイル」にそれらを識別するためのファイル名拡張子がある場合は、次のようにすることができます。
editor-command *.txt
テクニックを説明するために、ファイル名の一致だけでは実行できなかった、ファイル名だけでなくコンテンツに基づいてファイルを開く、より複雑な例を使用してみましょう。「content-type」という文字列を含むすべてのファイルを開きたいとしましょう。
エディターが複数のファイル名を受け入れ、それらを一度に別々のバッファーで開くか、それらを順番に処理すると仮定すると、次のように実行できます。
editor-command $(grep -i content-type)
元の質問に戻りましょう。それらがテキストファイルであるのか、名前に基づいていないのかわからないとしましょう。次に、別のプログラムを使用してそれらを識別し、そのデータに基づいてそれらを開く必要があります。プログラムfile
は、ファイルの種類を教えてくれます。テキストファイルだけのリストをgrepしてから、次のように一致するファイル名だけを開くことができます。
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で、前のコマンドの結果をすべて開きます。
エディターが一度に1つのファイルしか受け入れず、エディターを起動し続ける必要がある場合は、stdioを必要とする端末ベースのエディターを使用しているかどうかに応じて、jmtdの回答でorxargs
またはfor
ループのバリアントを使用する必要があります。
現在のディレクトリで何か.txt
(つまり*.txt
)と呼ばれるすべてのファイルを開くには:
$EDITOR *.txt
どこ$EDITOR
お気に入りのエディタは例えば、あるgedit *.txt
、nano *.txt
、vim *.txt
、emacs *.txt
または何でも。*
現在のディレクトリ内のすべてのファイルを照合するためだけに使用します。
ls
コマンドは含まれていないことに注意してください。の仕事ls
は、実際にファイルのリストを表示することではありませんが、ディレクトリで呼び出すと発生します。どこにls
ファイルの属性(更新時刻、アクセス権、サイズなど)を表示する際に有用です。特定のワイルドカードパターンに一致する一連のファイルに対して何かを行うには、シェルのグロブで十分です。
十分に高度なエディターでは、これを内部から行うことができます。たとえば、Emacsでは、通常のファイルを開くコマンド(C-x C-f
)を使用して、と入力し*.txt
ます。
zshまたはbash≥4のサブディレクトリにあるファイルも照合する場合は、を使用できます$EDITOR **/*.txt
。
テキストエディターのニュアンスに依存します。高度なエディターは、1つのインスタンスでコマンドラインから複数のファイルを開くことを処理できます。ただし、たとえば、エディター(以下の例では$ EDITOR)は一度に1つしか開くことができないとします。あなたは適切なのパイプ出力をすべきfind
にxargs
。これは、TTYを引き継がない$ EDITORにも依存します(そのため、グラフィカルなものを使用します)。
find . -maxdepth 1 -type f -name '*.c' -print0 | xargs -r0n 1 $EDITOR
コンソールエディターを使用する場合はシェルループの方が適切ですが、多くの一般的ではないファイル名で(空白文字の折りたたみや置換などにより)失敗します。
for i in *.c; do $EDITOR "$i"; done
for
空白文字の折りたたみ/変更を含む多くのファイル名の場合、ケースは失敗することに注意してください。
for
ケースはすべてのファイル名で機能します(一部のエディターで始まる名前-
または+
一部のエディターで名前が変更される可能性があります。それfor i in ./*.c
を修正します)。
editor-command *.css
など