Obviamente, você deseja converter algumas páginas HTML em texto simples. Portanto, eu não desnudaria as tags com uma solução personalizada (por exemplo, com alguma mágica sed), mas usaria uma ferramenta projetada para essa finalidade, como html2text ; da sua página da Web:
html2text is a Python script that converts a page of HTML into clean, easy-to-read plain ASCII text. Better yet, that ASCII also happens to be valid Markdown (a text-to-HTML format).
Para resolver sua questão de renomeação em lote:
find . -maxdepth 1 -type d -print0 | while IFS= read -r -d '' dirname
do python path/to/html2text/html2text.py "${dirname}/index.html" > "${dirname}/${dirname}.txt"
done
Aqui, o comando find lista todos os diretórios localizados apenas no diretório atual (ou seja, não recursivo) e o comando read (na condição while) atribui os valores à variável $dirname
. Finalmente, o (s) comando (s) entre do
e done
get (s) executado, aqui ele converte os arquivos de acordo com o seu pedido. Como apontado por @slhck, você precisa usar um comando tão complexo, para que nomes de usuário com espaços em branco não quebrem nada.
[Editar] : outra variante para converter todos os arquivos HTML no diretório atual:
find . -iname "*.html" -print0 | while IFS= read -r -d '' filename
do python path/to/html2text/html2text.py "${filename}" > "${filename%.*}.txt"
done
iname
pesquisas caso i nsensitive para *.html
.
${filename%.*}.txt
retira a extensão e anexa .txt
, ou seja, se filename
for some/path/index.html
, ${filename%.*}
for some/path/index
e finalmente ${filename%.*}.txt
for some/path/index.txt
.
Quando você usa o Z shell , você pode usar um loop muito mais limpo, sem frear em espaços em branco:
for i (*(/)) python path/to/html2text/html2text.py "${i}/index.html" > "${i}/${i}.txt"
O truque aqui é que *(/)
gera o nome do arquivo, mas apenas retorna os diretórios (/)
.
[Editar] : Também na sintaxe zsh a variante para converter todos os arquivos HTML no diretório atual (você precisa da opção EXTENDEDGLOB
a ser definida):
for i ((#i)**/*.html) {
python path/to/html2text/html2text.py "$i" > "${i:r}.txt"
}
(#i)
usa o caso i globalização nsensitiva, **
procura recursivamente, portanto, retorna todos os arquivos HTML no diretório de trabalho atual. (Se os links simbólicos devem ser seguidos, use três estrelas ***
em vez de dois).
Se você tiver mais de um comando dentro do loop for, use parênteses { ... }
(desnecessário aqui, mas eles não vão doer).
${i:r}
retira a extensão (r para remoção) da variável $i
.