両方の列に1000行を出力するbashでSQLクエリを呼び出す必要があります。
- ファイルパス(例
/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クエリの結果を処理する方法については言及していません。