내부에 많은 폴더가 있는 폴더가 있고 각 폴더에는 많은 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
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뿐입니다.