В каталоге есть много папок .html внутри, я бы хотел, чтобы весь HTML анализировался как новый .txt с именем родительского каталога.
Example1/ Index.html> Example1.txt
Example2/ Index.html> Example2.txt
В каталоге есть много папок .html внутри, я бы хотел, чтобы весь HTML анализировался как новый .txt с именем родительского каталога.
Example1/ Index.html> Example1.txt
Example2/ Index.html> Example2.txt
Очевидно, вы хотите конвертировать некоторые HTML-страницы в обычный текст. Поэтому я не стал бы удалять теги с помощью специально созданного решения (например, с некоторой магией sed), но использовал бы инструмент, предназначенный для этой цели, такой как html2text ; со своей веб-страницы:
html2text - это скрипт Python, который преобразует страницу HTML в чистый, легко читаемый текст в формате ASCII. Еще лучше то, что ASCII также является допустимым Markdown (формат текста в HTML).
Чтобы ответить на ваш вопрос о пакетном переименовании:
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
Здесь команда find перечисляет все каталоги, расположенные только в текущем каталоге (т.е. не рекурсивно), а команда read (в условии while) присваивает значения переменной $dirname
. Наконец, команда (ы) между do
и done
get (s), здесь он преобразует файлы в соответствии с вашим запросом. Как указывает @slhck, вам нужно использовать такую сложную команду, чтобы имена каталогов с пробелами ничего не ломали.
[Редактировать]: еще один вариант для преобразования всех файлов HTML в текущем каталоге:
find . -iname "*.html" -print0 | while IFS= read -r -d '' filename
do python path/to/html2text/html2text.py "${filename}" > "${filename%.*}.txt"
done
iname
ищет случай я nsensitive для *.html
${filename%.*}.txt
удаляет расширение и добавляет .txt
, т. е. если filename
some/path/index.html
, ${filename%.*}
- это some/path/index
и, наконец, ${filename%.*}.txt
- это some/path/index.txt
.
Когда вы используете оболочку Z, вы можете использовать намного более чистое средство для цикла, без торможения в пустых пространствах:
for i (*(/)) python path/to/html2text/html2text.py "${i}/index.html" > "${i}/${i}.txt"
Хитрость в том, что *(/)
выполняет генерацию имени файла, но возвращает только каталоги (/)
.
[Редактировать]: также в синтаксисе zsh вариант для преобразования всех файлов HTML в текущем каталоге (необходимо установить параметр EXTENDEDGLOB
):
for i ((#i)**/*.html) {
python path/to/html2text/html2text.py "$i" > "${i:r}.txt"
}
(#i)
использует случай я nsensitive подстановки, **
поиск рекурсивно, поэтому возвращается все HTML - файлы в текущей рабочей директории. (Если нужно следовать символическим ссылкам, используйте три звезды ***
вместо двух).
Если у вас есть более одной команды внутри цикла for, используйте фигурные скобки { ... }
(здесь нет необходимости, но они не повредят).
${i:r}
удаляет расширение (r для удаления) из переменной $i
.