我必须从 bash 调用一个 SQL 查询,该查询输出两列 1000 行
- 文件路径(例如,
/opt/files/dest/2.bin
) - 文件名称(例如,,
fax attachment.pdf
...invoice.docx
是的,有空格)。
服务器文件系统中的文件名有不同的命名格式,例如:1.bin、22.bin。有 <1000 个独特的文件,与某些丢失的文件完全一样。
这是 SQL 查询的快照:
Select * from datafileinfo limit 4;
输出:
FILEID,NAME
/ran/file/MM/2012/04/3.bin,new_fax.pdf
/ran/file/MM/2013/06/12.bin,new_report.docx
/ran/file/MISC/2012/08/212.bin,daily_transact.jrxml
/ran/file/MONY/2013/04/122.bin,NULL
第一步,我收集了所有这些文件并将其放入临时文件夹中。
但我无法重命名这些文件,因为我必须查找“文件名”和相应的“文件路径”。我有什么办法可以完成这项工作吗?
答案1
- 将 IFS 分隔符更改为“,”
- while循环遍历mysql查询结果
- 从旧路径中提取目录
- 执行重命名
代码将类似于:
#!/bin/bash
IFS=','
mysql ...executequery... | while read oldpath newfname
do
filedir=$(dirname $oldpath)
mv "$oldpath" "$filedir/$newfname"
done
您没有提到如何处理 NULL 查询结果。