名前を変更するか、ファイル名を一意にします。

名前を変更するか、ファイル名を一意にします。

私はutlファイルを使用してUnix一時ディレクトリにファイルを生成するplsqlプロシージャを作成しました。

ファイル名をシェルスクリプトに送信し、ファイルをメールで送信し、一時ディレクトリからメールで送信した後に削除するとうまく機能しますが、2人が同じファイルで同じ要求を実行すると、ファイルは最初のファイルに置き換えられます。削除されたプログラムと2番目のプログラムは、メールで送信するディレクトリにファイルがありません。

ファイル名を一意にするためにnames_request_idファイルを作成することにしましたが、実際の要件は、電子メールの受信者にrequest_idなしで同じ名前のファイルをインポートすることです。

同じプログラムに対して非互換性を作成しましたが、時間を節約するために非互換性を削除したいと思います。

他にどのようなオプションがありますか?

参考までに、シェルスクリプト全体をコピーして変更したいコードの場所を表示するために#######記号を追加しました。

生成されたディレクトリにファイルが移動され、ファイル名にreuest_id-filename.extensionがあるため、request_idと「-」を削除して実際のファイル名が必要です。データベースのファイル名: 23456663-abcd.pdf 必須ファイル名: abcd.pdf

param=`echo $*`
#getting input values
echo "params : $param"

v_temp=`echo $param  | cut -d '"' -f 1 `
v_temp=`echo $v_temp | cut -d '=' -f 2 `
v_temp=`echo $v_temp | cut -d ' ' -f 1 `
#now v_temp has the request_id
v_temp=MUILT_EMAIL3-$v_temp

echo "temp file is : $v_temp"


#split the parameter string with " as seperator
v_email_list=`echo $param | cut -d '"' -f 8 `
v_file_list=`echo $param | cut -d '"' -f 10 `
v_subject=`echo $param | cut -d '"' -f 12 `
v_mail_content=`echo $param | cut -d '"' -f 14 `
v_reply_to=`echo $param | cut -d '"' -f 16 `
v_delete_attachment_files=`echo "$1"|cut -d'"' -f18`
v_outputfile_path=`echo "$1"|cut -d'"' -f20`
v_outputfile=`echo "$1"|cut -d'"' -f22`
v_request_id=`echo "$1"|cut -d'"' -f24`
#v_rename_file=`echo $param | cut -d '"' -f 24 `
echo "email list :" $v_email_list
echo "file list :" $v_file_list
echo "subject :" $v_subject
echo "mail_content :" $v_mail_content
echo "reply_to :" $v_reply_to
echo "delete_attachment_files :" $v_delete_attachment_files
echo "outputfile_path :" $v_outputfile_path
echo "outputfile :" $v_outputfile
echo "request_id :" $v_request_id

v_email_list=`echo $v_email_list |tr ";" " "`
v_file_list=`echo $v_file_list |tr ";" " "`

pwd
cd /


mkdir /tmp/$v_request_id
cp $v_outputfile_path /tmp/$v_request_id/$v_outputfile

mv /tmp/$v_request_id* /tmp/$v_request_id/ 
cd /tmp/$v_request_id/

###### this is the place i need to rename the files that are moved to a request_id dir
################# mv -- "34178248-2640006.pdf" "${34178248-2640006.pdf}" 


v_mail_content =`basename $v_mail_content`
cat $v_mail_content > /tmp/${v_temp}.tmp


echo "File List : $v_file_list"

for i in ${v_file_list}; do
    echo "File to attach before parsing $i"
    v_attachment_name=`echo $i |awk '{ if ( index($1,":")> 0) { print substr($1,index($1,":")+1) } }'`
    v_attachment_file=`echo $i |awk '{ if ( index($1,":")> 0) { print substr($1,1,index($1,":")-1) } }'`

    echo "Checking attachment name after parse :"$v_attachment_name
    if [ "$v_attachment_name" = '' ]
      then
      v_attachment_name=`basename $i`
      v_attachment_file=$i
      echo "base name is " $v_attachment_name
    fi

    /usr/bin/uuencode $v_attachment_file $v_attachment_name >> /tmp/${v_temp}.tmp
done
echo "Loop done"

if [ "${v_reply_to}" = '' ]
  then
  mailx -s "${v_subject}" "${v_email_list}" < /tmp/${v_temp}.tmp
#echo "something" | mailx -s "${v_subject}" ${v_email_list} < /tmp/${v_temp}.tmp
else
  mailx -r "${v_reply_to}" -s "${v_subject}" "${v_email_list}" < /tmp/${v_temp}.tmp
#echo "something" | mailx -r "${v_reply_to}" -s "${v_subject}" ${v_email_list} < /tmp/${v_temp}.tmp
fi

echo "mailing done"

#delete the temporary files
  echo "deleting file /tmp/${v_temp}.tmp"
rm /tmp/${v_temp}.tmp


if [ "${v_delete_attachment_files}" = 'Y' ]
  then
    echo "deleting attached files -start "
    #Loop through to identify all the attachments and delete
    for i in ${v_file_list}; do
        echo $i
        v_attachment_name=`echo $i |awk '{ if ( index($1,":")> 0) { print substr($1,index($1,":")+1) } }'`
        v_attachment_file=`echo $i |awk '{ if ( index($1,":")> 0) { print substr($1,1,index($1,":")-1) } }'`

        echo "Check :"$v_attachment_name
        if [ "$v_attachment_name" = '' ]
          then
          v_attachment_name=`basename $i`
          v_attachment_file=$i
          echo "base name is " $v_attachment_name
        fi

        echo "deleting file $v_attachment_file"
        rm $v_attachment_file
    done
    #End Loop through to identify all the attachments and delete
fi

echo "rm done"

ベストアンサー1

別の解決策は、要求されたプロセスIDに基づいて一時ディレクトリを作成し、ファイルをそのディレクトリにダンプしてから(おそらくファイルをcd作成する前にコマンドを介して?)そこからメールで送信することです。これにより、異なるPIDを持つ2番目のタスクが別のディレクトリで実行されます。 SQLビットがどのように機能するかはわかりませんが、ここから攻撃を開始します。

おすすめ記事