内部には多くのフォルダがあるフォルダがあり、各フォルダには多くのMarkdownファイルがあります。私が望むのは、再帰的に(可能であれば)各ファイルのヘッダーとしてファイル名を取得することです。
だから与えられたfoo.md
:
The cat sat on the carpet, which is really just endless mat to a cat.
私が欲しい:
# Foo.md
The cat sat on the carpet, which is really just endless mat to a cat.
ファイル拡張子には興味がありません。後に行がある有効なMarkdownヘッダ1という事実が気になります。
私のファイル構造は次のとおりです
md/
foo/
heaps.md
and.md
bar/
heaps.md
of.md
baz/
files.md
omg.md
その他など理想的には、.shなどのファイルにコピーできるようにしたいのですが、1行も良いでしょう!
乾杯。
ベストアンサー1
bashのglobstarとedといくつかのPEを試してみてください。まず、いくつかのサンプルデータ/ディレクトリを試してみることをお勧めします。
shopt -s globstar
for f in md/**/*.md; do
header=${f##*/} header=${header^}
printf '%s\n' 0a "# $header" "" . w | ed -s "$f"
done
またはシングル裏地ですが、設定することを忘れないでくださいglobstar
for f in md/**/*.md; do header=${f##*/} header=${header^}; printf '%s\n' 0a "# $header" "" . w | ed -s "$f" ; done
globstarがまだ開いている間にファイルの内容を確認しようとします。
tail -n+1 md/**/*.md
0
バッファのアドレスまたは行番号であり、ORを表すa
演算です。append
add
アドインは、""
ファイルの次の行の前に空の行を作成することです。
代わりに1i
(最初の行に挿入することを意味します)も0a
機能しますが、空のファイルの場合は失敗します。
.
edにファイルの編集が完了したことを通知し、w
ファイルに書き込むことを意味します。
|
にパイプするed
ことは -s
沈黙を意味し、何も出力しませんstdout
。
残りはbashシェルの変数割り当てとPEだけです。