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命令结束。
在 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一旦您确认它与正确的模式匹配,就删除该选项)。