我有一个目录,其中有许多没有扩展名的文件,这些文件是通过调用 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
该选项;但是默认情况下应该打开: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
答案2
您可以not
在find
命令中使用标志并迭代该输出。
查找没有扩展名的文件,或者更具体地说,查找名称中没有点的文件:
find . -type f -not -name "*.*"
遍历这些文件并调用html2text
:
for file in `find . -type f -not -name "*.*"`; do html2text "$file" > "$file.txt"; done