У меня есть каталог, заполненный множеством файлов без расширений, которые были добавлены вызовом wget.
Я хочу использовать html2text для преобразования всех этих файлов в текстовые файлы.
Другими словами, как запустить эту команду
html2text listbaba=A > listbaba=A.txt
, но не только на listbaba=A, но все файлы в текущем каталоге без расширений. В Интернете вы найдете этот пример:
for file in *.html; do html2text "$file" > "$file.txt"; done
, но вопрос заключается в том, что я должен заменить "*.html", чтобы сделать это для всех файлов с no extions ~
Вы можете скрыть шаблон глобуса:
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