두 열에 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 쿼리 결과를 처리하는 방법에 대해서는 언급하지 않았습니다.