特定のディレクトリにあるファイル一覧のHTMLファイルを作成
特定のディレクトリに、各種レポートのcsvファイルやhtmlファイルが有るディレクトリがあります。通常はFTPやSCPでファイルをダウンロードして取得していました。
月次処理でその都度、FTPソフトでダウンロードしていましが、最近面倒になったので下記の仕様に変更することにしました
- html,csvファイルのレポートファイルをWEBディレクトリにコピー
- 各種レポートファイルのリンクが有る「index.html」を作成
php等で作成すれば簡単にできそうですが、今回は上記の仕様をシェルスクリプトで作ります。
シェルスクリプトは以下となります
#!/bin/bash # csv,htmlファイルがあるディレクトリ WORKDIR=/home/admin/report # indexを作成するディレクトリ WEBDIR=/var/www/html/report # csv,htmlファイルがあるディレクトリ から WEBディレクトリにコピー cp -pr $WORKDIR $WEBDIR # htmlファイル作成 echo "<html>" > ${WEBDIR}/index.html echo "<head>" >> ${WEBDIR}/index.html echo "<meta charset=\"UTF-8\">" >> ${WEBDIR}/index.html echo "<title>HTMLファイル一覧</title>" >> ${WEBDIR}/index.html echo "</head>" >> ${WEBDIR}/index.html echo "<body>" >> ${WEBDIR}/index.html echo "<h1>HTMLファイル一覧</h1>" >> ${WEBDIR}/index.html echo "<ul>" >> ${WEBDIR}/index.html # htmlファイル一覧 for file in $(ls -1 ${WEBDIR}/*.html); do echo "<li><a href=\"$file\">$file</a></li>" >> ${WEBDIR}/index.html done echo "</ul>" >> ${WEBDIR}/index.html echo "<h1>CSVファイル一覧</h1>" >> ${WEBDIR}/index.html echo "<ul>" >> ${WEBDIR}/index.html # csvファイル一覧 for csv in $(ls -1 ${WEBDIR}/*.csv); do echo "<li><a href=\"$csv\">$csv</a></li>" >> ${WEBDIR}/index.html done echo "</ul>" >> ${WEBDIR}/index.html echo "</body>" >> ${WEBDIR}/index.html echo "</html>" >> ${WEBDIR}/index.html
HTMLファイル等一覧を取得する
ls コマンドを使用して、特定のファイル形式の一覧を下記コマンドで取得しています。
「-1」のオプションは、ファイルやディレクトリのリストを1行に1つずつ表示します。ファイル名が縦に1列に表示されるので、スクリプトで処理する場合などに便利です
ls -1 ${WEBDIR}/*.html
HTMLタグで囲んでリスト表示する
取得したHTMLファイル名をHTMLのリスト表示形式で出力します。forループを使ってファイル名を1つずつ処理し、<a>タグでリンクを作成します。
for file in $(ls -1 ${WEBDIR}/*.html); do echo "<li><a href=\"$file\">$file</a></li>" done
公開するディレクトリは、セキュリティを考慮するとBAISC認証やIP制限をかけたほうが良いです
ディスカッション
コメント一覧
まだ、コメントがありません