微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于重命名和重新排列文件的脚本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

如何使用“cmp”来比较两个二进制文件,并find它们不同的所有字节偏移量?

如何将认的bash / zsh模式设置为vi命令模式而不是vi插入模式?

什么是mkdir中的详细选项?

错误:命令'gcc'在CentOS上以退出状态1失败

提取2组/文件间的唯一值

尝试在2个分隔符之间获取string

在bash脚本中解决sys.excepthook错误

redirect由可执行文件创build的文件中的所有内容

捕获一个bash脚本的所有input和输出

Shell命令以目录模式查找文件

使用perl rename (有时称为prename )实用程序:

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

(注意:认情况下,一些发行版在util-linux软件包中安装了rename命令,这个命令是不兼容的 ,如果你有这样一个发行版,请查看perl版本是否可用。

怎么运行的

rename需要一个perl命令作为参数。 这里的参数由一个替代命令组成。 该文件的新名称可以通过将substitute命令应用于旧名称来找到。 这使我们不仅可以给文件一个新的名字,而且还可以像上面那样创建一个新的目录。

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

您可以使用basename和dirname函数来重建新的文件名:

get_new_name() { oldname=$1 prefix=$(basename $oldname _freeSurface.md) dname=$(dirname $oldname) basedir=$(dirname $dname) dname=$(basename $dname) echo "$basedir/ada-$dname-$prefix.md" }

例如get_new_name("ada/rda/0.05/alpha1_freeSurface.md")将在控制台中显示ada/rda/ada-0.05-alpha1.md 。

然后,您可以遍历所有文件,并使用mv命令重命名文件

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐