首页 > 解决方案 > AWK 使用的替代方案

问题描述

我希望有一个更优雅的文件批量重命名解决方案,如下所示。文件是格式的DEV_XYZ_TIMESTAMP.dat,我们需要它们为T-XYZ-TIMESTAMP.dat. 最后,我将它们全部(在同一侧)复制到renamed文件夹中:

ls -l *dat|awk '{system("cp " $10 " renamed/T-" substr($10, index($10, "_")+1))}'

因此,首先我列出了所有 dat 文件,然后选择第 10 列(文件名)并使用 awk 的系统函数执行命令。该命令本质上是将原始文件名复制到具有新文件名的重命名文件夹中。通过在(包括)_ 之前删除(awk子字符串函数)前缀并添加“T-”前缀来创建新文件名。

有效:

cp DEV_file.dat renamed/T-file.dat

有没有办法使用cpmv与一些正则表达式规则一起以更优雅的方式实现相同的目标?

谢谢

标签: linuxbashshellawkmv

解决方案


你可以使用这个脚本:

for file in *.dat; do
   f="${file//_/-}"
   mv "$file" renamed/T-"${f#*-}"
done

您必须避免解析ls命令的输出。


推荐阅读