Tipo, renomear todos os arquivos HTML em um diretório pelo texto contido em TEXT?
Uma combinação de grep, sed e mv poderia funcionar?
Por exemplo, tenho um arquivo que contém 1.html. O título de 1.html está contido no arquivo HTML como TEXT (está contido nas tags de título TEXT. Gostaria de renomear 1.html para TEXT.html
Se um arquivo for nomeado 5.html e o título de 5.html for TEST2, desejo renomear 5.html para TEST2.html.
Responder1
for file in *.html ; do
name="$(sed -n '/<title>/{s=[^>]*title>==;s=</title.*==;s=[^0-9A-Za-z-_]=_=g;p;q}' "$file")"
if [ -f "$name" ]; then
[ -f "${name}_$file" ] || mv -f "$file" "${name}_$file"
else
mv -v "$file" "${name}.html"
fi
done
sed
explicação:
/<title>/ -- finds the string with <title> and
applies a group of commands to it
{} -- a group of commands
s=[^>]*title>== -- removes everything before <title> including tag
s=</title.*== -- removes everything after </title> including tag
s=[^0-9A-Za-z-_]=_=g -- substitute all non alphabet/num characters to _
p -- print the output
q -- exit as there is no need to process rest of the file
obs. coloque echo
antes de cada mv
para rodar no modo seco e verifique se tudo está bem.
pp. também sed construção espera que fdjskjfls esteja em uma linha e não tenha nenhuma tag antes na mesma linha.
Responder2
Eu usaria uma abordagem mais simples, supondo que você tenha GNU grep
:
for f in *.html ; do
mv -v "$f" "$(grep -oP '<title>\K.+?</title>' $f | sed 's#</title>##').html"
done