根据指令文件重命名目录中的文件
Renaming files in a directory based on an instructions file
我有一个重新组合一个 .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.unl 我正在寻找一种方法来从 .sql 文件中检索名称并正确重命名 .unl 文件。
.sql 文件包含多条指令,这里是包含正确名称的行的示例。
{ unload file name = table1_89747.unl number of rows = 8376}
如您所见,唯一的共同点是示例中的 table 名称 (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 '\''.unl'\'' '\'''\''/p' <database.sql
假设:=
符号周围存在空格,文件名的格式为FOO_BAR.unl
,即下划线字符和扩展名始终存在。
示例输出:
$ echo '{ unload file name = table1_89747.unl number of rows = 8376}' | sed -n 's/.*name = \([^_]*\)\(_[^.]*\.unl\).*/mv '\''.unl'\'' '\'''\''/p'
mv 'table1.unl' 'table1_89747.unl'
要生成和执行命令:
eval $(sed -n 's/.*name = \([^_]*\)\(_[^.]*\.unl\).*/mv '\''.unl'\'' '\'''\'';/p' <database.sql | tr -d '\n')
不言而喻,在 运行 之前确保您的 database.sql
没有可能导致重命名当前目录之外的文件的恶意字符串。
我有一个重新组合一个 .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.unl 我正在寻找一种方法来从 .sql 文件中检索名称并正确重命名 .unl 文件。
.sql 文件包含多条指令,这里是包含正确名称的行的示例。
{ unload file name = table1_89747.unl number of rows = 8376}
如您所见,唯一的共同点是示例中的 table 名称 (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 '\''.unl'\'' '\'''\''/p' <database.sql
假设:=
符号周围存在空格,文件名的格式为FOO_BAR.unl
,即下划线字符和扩展名始终存在。
示例输出:
$ echo '{ unload file name = table1_89747.unl number of rows = 8376}' | sed -n 's/.*name = \([^_]*\)\(_[^.]*\.unl\).*/mv '\''.unl'\'' '\'''\''/p'
mv 'table1.unl' 'table1_89747.unl'
要生成和执行命令:
eval $(sed -n 's/.*name = \([^_]*\)\(_[^.]*\.unl\).*/mv '\''.unl'\'' '\'''\'';/p' <database.sql | tr -d '\n')
不言而喻,在 运行 之前确保您的 database.sql
没有可能导致重命名当前目录之外的文件的恶意字符串。