テキストベースのブラウザ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ファイルで作業したい場合は、2つの可能性があります。シェルが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