端末ディレクトリ内のすべてのファイルのファイル名と内容を取得する方法

端末ディレクトリ内のすべてのファイルのファイル名と内容を取得する方法

ディレクトリに不明な数のファイルがあるとします。以下の例のように、ファイル名とともに各ファイル内の内容を取得したいと思います。

file1 "ファイル 1 の内容"
file2 "ファイル 2 の内容"
file3 "ファイル 3 の内容"
............................. ...... ..... ........ .filen
"ファイル n の内容"

どうすればいいですか?

答え1

仮説文書テキスト形式でなければならず、大きすぎてはいけません(例:10,000行未満)。

それからあなたは試すことができますヘッド(1)(おそらくhead -vn -0 file*GNUヘッダーと同じでしょう)

head -10000 file1 file2 file3

一部のファイルはバイナリです。つまり、テキスト以外のコンテンツが含まれていることに注意してください。例えば、コアダンプ、一つSQLiteデータベースファイル、パプアニューギニア画像、実行可能ファイルファイルとさらにいくつか文書を開くLibreOfficeを使用して作成されたファイル。そのようなファイルではhead(または猫(1))そうではないので、良い結果は得られません。テキストファイルしかし、ほぼすべてのバイトシーケンスを含みます。

あなたが正しいかもしれませんファイル1)注文する。与えられたファイルのコンテンツタイプを推測しようとします。次の内容もお読みください。メディアタイプ(またはMIMEタイプ)

Unixシリーズシステムでは、ファイルは実際にはアイノードそして持てる一部名前(参照インデックスノード(7)リンク(2)ln(1)詳細はこちら)。ファイル名は大きな意味がありません。ファイルは基本的に何らかの方法で名前が付けられた一連のバイトです。このシーケンスの使用方法は、ファイルにアクセスするプログラムによって異なります。

xdg-openさまざまな種類のファイル(コンテンツを調整する)をグラフィカルに表示する方法に興味があるかもしれません。

次の内容もお読みください。ワイルドカード。バラよりグローバル(7)for組み込み機能について学びます。シェル。読むbash ループ構造

答え2

特定の出力形式では、次のことができます。

awk '{print substr(FILENAME, 3)" \""$0"\" "}' ./file*

これにより、ファイル名とファイルの各行の引用符内の行の内容が印刷されます。

引数をファイル名ではなく変数代入として扱う問題を解決するために、プレフィックスを追加して./削除します。substr()awkfilex=y.txt

ファイルにすでに文字が含まれていて、その文字を次のように表示(および明確に)"したい場合:\"\\\

awk '{gsub(/[\\"]/, "\\\\&"); print substr(FILENAME, 3)" \""$0"\" "}' ./file*

"(これはファイル名自体とは関係ありません)。

答え3

これにより、トリックを実行できます。

for f1 in *; do echo -n "$f1"" "\"; cat "$f1"; echo "\""; done

ディレクトリ内のすべてのファイルを繰り返してから、各ファイルの名前と内容を引用符で囲んで表示します。

関連情報