对目录中所有没有扩展名的文件运行 html2text

对目录中所有没有扩展名的文件运行 html2text

我有一个目录,其中有许多没有扩展名的文件,这些文件是通过调用 wget 放置在那里的。

我想使用 html2text 将所有这些文件转换为纯文本文件。

换句话说,如何运行此命令

html2text listbaba=A > listbaba=A.txt

但不仅listbaba=A限于当前目录中的所有文件扩展。在互联网上,可以找到这个例子:

 for file in *.html; do html2text "$file" > "$file.txt"; done 

但问题是我必须用什么来替换"*.html"所有文件延伸~

答案1

您可以否定通配符模式:

for f in !(*.*); do html2text "$f" > "$f.txt"; done

find这与使用in for f in "$(find [...])"; do [...]; done(或通过使用反引号在子 shell 中运行)不同find,不会在包含换行符的文件名上中断(并且,FWIW,避免分叉子 shell 并运行另一个进程)。

为了使其工作,您需要在当前实例中打开extglob该选项;但是默认情况下应该打开:bashbashextglob

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

答案2

您可以notfind命令中使用标志并迭代该输出。

查找没有扩展名的文件,或者更具体地说,查找名称中没有点的文件:

find . -type f -not -name "*.*"

遍历这些文件并调用html2text

for file in `find . -type f -not -name "*.*"`; do html2text "$file" > "$file.txt"; done

相关内容