尝试向所有文件递归添加文件扩展名时出错

Error when trying to recursively add file extension to all files

参考这个 post,recursively add file extension to all files,我试图递归地为许多单独的子文件夹中的许多文件添加扩展名。出现在我的子文件夹末尾的所有文件根本没有任何扩展名,我想给它们全部一个 .html 扩展名。

在使用 cd 切换到我想使用的父目录后,我在命令提示符下尝试了以下操作:

find /path -type f -not -name "*.*" -exec mv "{}" "{}".html \;

但是,我收到以下错误:"FIND: Invalid switch"

我是使用命令提示符进行此类操作的新手,所以请原谅我的无知。我在想,也许我必须将 /path 更改为我希望它查看的目录,但我试过了,但无济于事。

我也尝试过以下命令:

find . -type f -exec mv '{}' '{}'.html \;

并收到以下错误:FIND:参数格式不正确

我是运行Windows10.

-not 是一种古老的逻辑否定形式;当前形式是 !(感叹号)。它后面必须跟一个布尔表达式。在这种情况下,您在它后面加上 -name,这会破坏命令行解析。 -name 是另一个选项,不是有效的表达式运算符。

您需要在正则表达式中构建否定:否定句点,而不是整个名称。


我看到另一个强指标:什么是FIND?您应该 运行 的命令是 find; UNIX 区分大小写。在您使用的任何命令行中,键入 man findfind --help 以获取选项和语义列表。我担心您在 Windows 下的 bash 功能不全。


您是否熟悉 Windows 命令 重命名?它的语法类似于 UNIX mv,尽管它适用于多个文件。例如

rename [^.]* *.html

我认为可以用于单个目录。

似乎 -not 在您的 find 版本中不可用,请改用 !

find /path -type f \! -name "*.*" -exec mv "{}" "{}".html \;

来自查找手册:

-not expr

 Same as ! expr, but not POSIX compliant.

向所有评论和留下答案的人致歉。我相信我不清楚我是在 windows cmd 提示符下专门尝试使用它。我使用以下方法为子文件夹末尾的所有文件添加扩展名:

FOR /R %f IN (*.) DO REN "%f" *.html