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

use*_*413 2 bash conversion html

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

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

换句话说,如何运行这个命令

html2text listbaba=A > listbaba=A.txt
Run Code Online (Sandbox Code Playgroud)

但不仅仅是listbaba=A当前目录中没有扩展名的所有文件。在互联网上,有人找到这样一个例子:

 for file in *.html; do html2text "$file" > "$file.txt"; done 
Run Code Online (Sandbox Code Playgroud)

但问题是我必须替换什么才能"*.html"对所有没有扩展名的文件执行此操作~

kos*_*kos 5

您可以否定通配模式:

\n\n
for f in !(*.*); do html2text "$f" > "$f.txt"; done\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

为此,您需要在当前实例中打开 的extglob选项;但默认情况下应处于打开状态:bashbashextglob

\n\n
user@debian:~/tmp$ shopt extglob\nextglob         on\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果extglob关闭,您可以通过运行以下命令将其打开:

\n\n
shopt -s extglob\n
Run Code Online (Sandbox Code Playgroud)\n\n

并通过运行以下命令再次将其关闭:

\n\n
shopt -u extglob\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用的示例echo

\n\n
user@debian:~/tmp$ tree\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file1\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file1.html\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file2\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file2.html\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file3\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file3.html\n\n0 directories, 6 files\nuser@debian:~/tmp$ for f in !(*.*); do echo "$f"; done\nfile1\nfile2\nfile3\n
Run Code Online (Sandbox Code Playgroud)\n