Mysqlクエリ出力からファイルシステムのファイルを検索し、ファイル名を変更します。

Mysqlクエリ出力からファイルシステムのファイルを検索し、ファイル名を変更します。

両方の列に1000行を出力するbashでSQLクエリを呼び出す必要があります。

  1. ファイルパス(例/opt/files/dest/2.bin:)
  2. ファイル名(例: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

  1. IFS 区切り文字を「,」に変更します。
  2. whileループはmysqlクエリの結果を巡回します。
  3. 前のパスからディレクトリを抽出する
  4. 名前変更の実行

コードは次のとおりです。

#!/bin/bash
IFS=','
mysql ...executequery... | while read oldpath newfname
do
  filedir=$(dirname $oldpath)
  mv "$oldpath" "$filedir/$newfname"
done

NULLクエリの結果を処理する方法については言及していません。

関連情報