特定のディレクトリにあるファイル一覧の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制限をかけたほうが良いです

スポンサーリンク

0
0