基于指令文件重命名目录中的文件



我有一个目录,重新分组。sql文件和多个数据文件。

/home/barmar/test.dir
├── database.sql
├── table1.unl
├── table2.unl
├── table3.unl
├── table4.unl
├── table5.unl
└── table6.unl

.sql文件包含每个。unl文件的卸载指令,我的问题是。unl文件的名称与。sql上的指令不相同。

通常名称应为TABLE_TABID。直到我寻找一种方法从。sql文件中检索名称并正确地重命名。unl文件。

.sql文件包含多个指令,下面是包含正确名称的行示例。

{ unload file name = table1_89747.unl number of rows = 8376}

可以看到,在示例

中唯一的共同点是表名(table1)。预期结果应该是这样的:

/home/barmar/test.dir
├── database.sql
├── table1_89747.unl
├── table2_89765.unl
├── table3_89745.unl
├── table4_00047.unl
├── table5_00787.unl
└── table6_42538.unl

这行sed将生成命令,将table1.unl等文件重命名为table1_89747.unl:

sed -n 's/.*name = ([^_]*)(_[^.]*.unl).*/mv '''1.unl''' '''12'''/p' <database.sql

假设:=符号周围有空格,文件名格式为FOO_BAR.unl,即下划线字符和扩展名始终存在

样本输出:

$ echo '{ unload file name = table1_89747.unl number of rows = 8376}' | sed -n 's/.*name = ([^_]*)(_[^.]*.unl).*/mv '''1.unl''' '''12'''/p'
mv 'table1.unl' 'table1_89747.unl'

生成执行以下命令:

eval $(sed -n 's/.*name = ([^_]*)(_[^.]*.unl).*/mv '''1.unl''' '''12''';/p' <database.sql | tr -d 'n')

不用说,在运行此操作之前,请确保您的database.sql没有可能导致重命名当前目录以外的文件的恶意字符串。

相关内容

  • 没有找到相关文章

最新更新