将文本附加到不包含点的文件名

Bor*_*691 9 command-line rename batch-rename

鉴于以下文件:

english_api
english_overview
style.css
Run Code Online (Sandbox Code Playgroud)

我想得到:

english_api.html
english_overview.html
style.css
Run Code Online (Sandbox Code Playgroud)

换句话说,如何.使用终端将文本附加到目录中不包含点 ( ) 的所有文件。

显然那个文件夹中有很多文件;我只是写了3个例子。

如果我要在那个文件夹中替换.css.html,我会使用:

rename .css .html *.css
Run Code Online (Sandbox Code Playgroud)

但是我真的想不出一种方法来匹配不包含某些内容的文件。另外如何使用rename命令附加(与替换)?

Avi*_*Raj 13

试试这个find命令,

find . -type f ! -name "*.*" -exec mv {} {}.html \;
Run Code Online (Sandbox Code Playgroud)

它将当前目录中文件名中不包含点的文件重命名为这种filename.html格式(在最后添加.html)。

. --> 代表当前目录

-type f --> 只对文件做这个操作。

! -name "*.*" --> 打印名称中没有点的文件的名称。

-exec mv {} {}.html -->find命令对提取的文件名执行此移动(或)重命名操作。

\; --> 代表find命令结束。


ste*_*ver 6

在 bash 中,您可以使用扩展的 shell glob,例如

for file in path/to/files/!(*.*); do echo mv "$file" "$file.html"; done
Run Code Online (Sandbox Code Playgroud)

echo一旦您确认它与正确的模式匹配,就删除它)。如果尚未启用扩展通配符,您可以使用shopt -s extglob.

另一种选择是将基于 perl 的rename函数与排除文字的正则表达式一起使用.

rename -nv 's/^[^.]+$/$&.html/' path/to/files/*
Run Code Online (Sandbox Code Playgroud)

n一旦您确认它与正确的模式匹配,就删除该选项)。