linux – 用于重命名和重新排列文件的脚本shell

我想重新排列和重命名文件.

我有这种文件树结构:

ada/rda/0.05/alpha1_freeSurface.md
ada/rda/0.05/p_freeSurface.md
ada/rda/0.05/U_freeSurface.md
ada/rda/0.1/alpha1_freeSurface.md
ada/rda/0.1/p_freeSurface.md
ada/rda/0.1/U_freeSurface.md

我想要重命名和重新排列文件,如下面的结构:

ada/rda/ada-0.05-alpha1.md
ada/rda/ada-0.05-p.md
ada/rda/ada-0.05-U.md
ada/rda/ada-0.1-alpha1.md
ada/rda/ada-0.1-p.md
ada/rda/ada-0.1-U.md

最佳答案 使用perl重命名(有时称为prename)实用程序:

rename  's|ada/rda/([^/]*)/([^_]*).*|ada/rda/ada-$1-$2.md|' ada/rda/*/*

(注意:默认情况下,某些发行版会从util-linux软件包安装一个rename命令.此命令不兼容.如果您有这样的发行版,请查看perl版本是否在名称prename下可用.)

这个怎么运作

rename将perl命令作为参数.这里的参数由一个替换命令组成.通过将substitute命令应用于旧名称,可以找到该文件的新名称.这使我们不仅可以为文件指定新名称,还可以为上面的新目录.

更详细地说,substitute命令看起来像s | old | new |.在我们的例子中,旧的是ada / rda /([^/]*)/([^_]*).*.这将捕获组2中的数字和组2中文件名的开头(第一个_之前的部分).新部分是ada / rda / ada- $1- $2.md.这将使用两个捕获的组创建新文件名.

点赞