나는 여러 개의 html 파일을 가지고 있고 header.txt와 같은 헤더 파일(적어도 몇 줄 길이)로 그것들을 (개별적으로) 분류하고 싶습니다. 나는 곧 도착할 것이다. 헤더 파일을 이용하여 각 파일을 분류하려면 다음 명령을 사용하면 되는데, 원본 파일 이름으로 저장하려면 결과를 어떻게 출력해야 할까요?
find . -iname "*.html" | xargs -L 1 cat header.txt
xargs
위 내용은 내가 원하는 것을 인쇄하지만 최종 > 원본 파일 이름을 추가하기 위해 매개변수를 어떻게 인용합니까 ?
즉, header.txt의 텍스트를 각 HTML 파일의 시작 부분에 삽입하고 싶습니다. 이를 위해 위 명령을 수정할 수 있습니까? 아니면 이것을 달성하는 다른 방법이 있습니까?
업데이트로서, 성공하지 못한 채 게시한 이후 시도한 내용은 다음과 같습니다.
find . -iname "*.html" | xargs -L 1 cat header.txt {} > {}.new
문자 그대로 이라는 이름의 파일로 인쇄된다는 점을 제외하면 괜찮습니다 {}.new
. 파일은 다음과 같아야 하지만 도움이 되지 않습니다.
또한 @Dave의 제안을 시도했지만 수정할 수 없는 구문 오류가 있었습니다.
find . -iname "*.html" -exec (cat header.txt; cat {}) > {}.new
-bash: syntax error near unexpected token `('
답변1
header.txt의 텍스트를 각 HTML 파일의 시작 부분에 삽입하고 싶습니다.
모든 HTML 파일 앞에 콘텐츠를 추가하려면 header.txt
다음 oneliner를 사용하십시오.
for i in `find . -name '*.html'` ; do cat /path/to/header.txt > "$i".tmp && cat "$i" >> "$i".tmp && mv "$i".tmp "$i" ; done
콘텐츠 1.html
:
first html file contents
콘텐츠 header.txt
:
my header
1.html
스크립트 실행 후 내용:
my header
first html file contents
(테스트해봤으나 만일의 경우를 대비해 파일을 백업해두시기 바랍니다.)
답변2
다음과 같이 while 루프를 사용할 수 있습니다.
find . -iname "*.html" | while read line; do cat header.txt "$line" > "${line}.new" ; done