텍스트 기반 브라우저 Lynx를 사용하여 1000개의 html 파일을 동일한 파일 이름의 텍스트 파일로 덤프해야 합니다.
주어진 filename.html에 대해 명령은 다음과 같습니다.
lynx filename.html --force-html --dump > filename.txt
문제는 이런 파일이 수만 개나 있다는 것입니다.
.lynx *.html --force-html --dump *.html
답변1
lynx
별도의 출력 파일을 생성하려면 각 파일에 대해 이 작업을 한 번 수행 해야 합니다 . 여러 파일에 대해 특정 작업을 순차적으로 수행하려면 다음을 사용하십시오.for 루프. 이것무늬 *.html
. 로 끝나는 현재 디렉터리의 모든 이름과 일치합니다 .html
.
for x in *.html; do … done
루프가 실행될 때마다 변수는 x
현재 파일 이름을 지정합니다. 파일 이름을 인용하는 경우 "$x"
(큰따옴표를 잊지 마세요. 그렇지 않으면 스크립트가 일부 파일 이름(예: 공백 포함)에서 중단됩니다.)
.txt
파일 이름을 만들려면 .html
값에서 접미사를 제거하고 접미사를 x
추가하세요 . .txt
하나 있다매개변수 확장접미사를 뺀 변수 값을 가져오도록 구성됨: ."${VARIABLE%SUFFIX}"
for x in *.html; do
lynx --force-html --dump "$x" >"${x#.html}.txt"
done
하위 디렉터리의 HTML 파일에도 작업하려는 경우 두 가지 가능성이 있습니다. 쉘이 bash, ksh 또는 zsh인 경우 이 **
모드를 사용하여 하위 디렉토리로 재귀할 수 있습니다. Bash에서는 shopt -s globstar
이 기능을 먼저 활성화해야 합니다. Kashmir에서는 set -o globstar
.
shopt -s globstar
for x in **/*.html; do
lynx --force-html --dump "$x" >"${x#.html}.txt"
done
또는 다음을 사용하십시오.find
주문하다. 파일 이름을 조작해야 하므로 find
쉘을 실행해야 합니다.
find . -name '*.html' -exec sh -c '
lynx --force-html --dump "$0" >"${0#.html}.txt"
' {} \;
$0
다음의 첫 번째 매개변수입니다. 일괄적으로 쉘을 실행하는 것은 for 루프와 결합(여러 파일 이름이 각각의 단일 쉘 호출에 전달됨을 나타내는 를 사용)하여 더 빨라질 수 있습니다. "제외하고 쉘의 명령줄 인수를 반복합니다"를 의미합니다.sh -c CODE
find
-exec … {} +
find
for x do
$0
find . -name '*.html' -exec sh -c '
for x; do lynx --force-html --dump "$x" >"${x#.html}.txt"; done
' _ {} +
답변2
( set ./*.html; [ -f "$1" ] || exit
printf 'eval "$L;shift" >"${1%%%.0s.*}.txt"\n' "$@" |
L=' lynx "$1" --force-html --dump' sh -eCs "$@"
) &
답변3
for x in *.html;do
lynx $x --force-html --dump >${x%%.html}.txt
done