Запустите html2text для всех файлов в каталоге, которые не имеют расширения
У меня есть каталог, заполненный множеством файлов без расширений, которые были помещены туда при вызове wget.
Я хочу использовать html2text для преобразования всех этих файлов в текстовые файлы.
Другими словами, как запустить эту команду
html2text listbaba=A > listbaba=A.txt
но не только на listbaba=A
но все файлы в текущем каталоге без расширений. В Интернете можно найти этот пример:
for file in *.html; do html2text "$file" > "$file.txt"; done
но вопрос в том, что я должен заменить "*.html"
сделать это для всех файлов без расширений ~
2 ответа
Вы можете использовать not
флаг в find
команда и перебрать этот вывод.
Найдите файлы, которые не имеют расширения или, более конкретно, файлы, у которых нет точки в имени:
find . -type f -not -name "*.*"
Переберите эти файлы и вызовите html2text
:
for file in `find . -type f -not -name "*.*"`; do html2text "$file" > "$file.txt"; done
Вы можете отменить шаблон сглаживания:
for f in !(*.*); do html2text "$f" > "$f.txt"; done
Это, в отличие от использования find
в for f in "$(find [...])"; do [...]; done
(или запустив find
в подоболочке, использующей обратные метки), не будет разбиваться на имена файлов, содержащие символы новой строки (и, FWIW, избегает разветвления подоболочки и запуска другого процесса).
Для этого вам понадобится extglob
вариант bash
быть включенным в вашем текущем bash
пример; тем не мение extglob
должен быть включен по умолчанию:
user@debian:~/tmp$ shopt extglob
extglob on
Если extglob
Вы можете включить его, выполнив:
shopt -s extglob
и выключите его снова, запустив:
shopt -u extglob
Пример использования echo
:
user@debian:~/tmp$ tree
.
├── file1
├── file1.html
├── file2
├── file2.html
├── file3
└── file3.html
0 directories, 6 files
user@debian:~/tmp$ for f in !(*.*); do echo "$f"; done
file1
file2
file3