gpt4 book ai didi

linux - 如何将一批文件重命名为每个文件第一行中存在的名称

转载 作者:太空宇宙 更新时间:2023-11-04 09:03:16 24 4
gpt4 key购买 nike

我需要将单个目录中的一批文件重命名为文件内容第一行反引号之间的字符。

文件名:schema.stored.procedure302
文件中的第一行是:

/* Procedure structure for procedure `usp_stored_procedure_abc` */

所需的新文件名:usp_stored_procedure_abc.sql


下面是更详细的场景:

我有一个 schema.sprocs.sql 文件,它只包含来自 mysqldump 的存储过程。

我用csplit把文件拆分成了300+个单独的sql文件

csplit -f schema.stored.procedure schema.sprocs.sql '/Procedure structure for procedure/' {*}

效果非常好,现在我有这样的文件:

schema.stored.procedure302
schema.stored.procedure303
schema.stored.procedure304
等等……

我需要帮助的是:
我可以使用什么命令来读取每个文件的内容,找到模式:

/* Procedure structure for procedure `

然后使用符合该模式的字符重命名文件,直到找到反引号。

例如:

文件schema.stored.procedure302第一行包含以下行:

/* Procedure structure for procedure `usp_stored_procedure_abc` */

我需要将该文件重命名为:usp_stored_procedure_abc.sql(文件内容第一行反引号之间的内容)。

我确定这是可行的,有人可以帮助我吗?

最佳答案

以下字符串显示,我们将如何获得新文件名:

head -n 1 file |awk -F'[`]' '{print $2".sql"}'

完整的脚本是这样的:

#!/bin/bash
for f in *;
do
d="$(head -n 1 $f |awk -F'[`]' '{print $2".sql"}')" ;
if [ ! -f "$d" ];
then
mv "$f" "$d"
else echo "File '$d' already exists! Skiped!"
fi
done

关于linux - 如何将一批文件重命名为每个文件第一行中存在的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16247473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com