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"
对所有没有扩展名的文件执行此操作~
您可以否定通配模式:
\n\nfor f in !(*.*); do html2text "$f" > "$f.txt"; done\n
Run Code Online (Sandbox Code Playgroud)\n\n这与使用find
in for f in "$(find [...])"; do [...]; done
(或使用反引号在子 shell 中运行find
)不同,不会在包含换行符的文件名上中断(并且,FWIW,避免分叉子 shell 并运行另一个进程)。
为此,您需要在当前实例中打开 的extglob
选项;但默认情况下应处于打开状态:bash
bash
extglob
user@debian:~/tmp$ shopt extglob\nextglob on\n
Run Code Online (Sandbox Code Playgroud)\n\n如果extglob
关闭,您可以通过运行以下命令将其打开:
shopt -s extglob\n
Run Code Online (Sandbox Code Playgroud)\n\n并通过运行以下命令再次将其关闭:
\n\nshopt -u extglob\n
Run Code Online (Sandbox Code Playgroud)\n\n使用的示例echo
:
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