Запустите 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
Другие вопросы по тегам