質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

2599閲覧

異なるフォルダ内にある同じファイル名の画像を取り出し、htmlで表示する方法

berrypq77

総合スコア14

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/03/16 04:51

###前提・実現したいこと
異なる複数のフォルダ内に、それぞれ同じ名前の画像ファイルが入っている場合に、その画像を一気に取り出してhtmlで表示するscriptをbashで書きたい。

ファイル構成はこのようになっています。
folder1/try1/A.png
folder1/try2/A.png
folder1/try3/A.png
folder1/try4/A.png
folder2/try1/A.png
folder2/try2/A.png
folder2/try3/A.png
folder2/try4/A.png

###発生している問題・エラーメッセージ

folder名とその下のtry名を変数として設定してみたつもりなのですが、
全ての画像が表示されず困っています。

###ソースコード

#!/bin/bash

LIST1='folder1 folder2'
LIST2='try1 try2 try3 try4'

for j in $LIST1
do
for i in $LIST2
do

cat << EOF > ./result.html

<html> <head> <body> <table border=1 align=center> <tr> <th></th> <th>tmp-$i</th> </tr> <tr> <td>tmp-$j</td> <td><img src="./tmp-$j/tmp-$i/A.png" width="384"></img></td> </tr> </table> </body> </head> </html> EOF done done

###補足情報(言語/FW/ツール等のバージョンなど)

OS はMacです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

bash のスクリプトなら find が使えませんか?
例えば
/tmp/folder1/try1/A.png
/tmp/folder1/try2/A.png
/tmp/folder2/try1/A.png
/tmp/folder2/try2/A.png
な状態で
find /tmp/ -name "A.png"
と実行すると
/tmp/folder1/try1/A.png
/tmp/folder1/try2/A.png
/tmp/folder2/try1/A.png
/tmp/folder2/try2/A.png
という結果が得られます。
あとはこの結果を好きなように料理するだけ。

投稿2016/03/16 05:24

HiroshiWatanabe

総合スコア2160

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

berrypq77

2016/03/16 06:46

回答ありがとうございます。 findで出てきたA.png全てを、次にhtml で画像を表示させる方法がわかりません。。 どのように記述すれば良いでしょうか。
HiroshiWatanabe

2016/03/16 07:30

例えば上の階層を想定して以下のようなスクリプト #!/bin/sh dir=/tmp/ fname=A.png head='<img src="./tmp-' foot='" width="384">' find $dir -name "$fname" | while read path do if [ "$path" != "" ]; then p1=`echo "$path" | awk -F/ '{print $3}'` p2=`echo "$path" | awk -F/ '{print $4}'` p3=`echo "$path" | awk -F/ '{print $5}'` echo "$head$p1/tmp-$p2/$p3$foot" fi done にすれば <img src="./tmp-folder1/tmp-try1/A.png" width="384"> <img src="./tmp-folder1/tmp-try2/A.png" width="384"> <img src="./tmp-folder2/tmp-try1/A.png" width="384"> <img src="./tmp-folder2/tmp-try2/A.png" width="384"> と出力されると思います。 awk が使えなければ cut で同じような事はできると思いますし read で最初から分割して個別の変数に入れた状態で読み込むように仕掛ければ cut や awk でわざわざ分割する作業も省略できると思います。
guest

0

ベストアンサー

ループの中で毎回 ./result.html を上書きしているから最後の結果しか残っていないですね。
どういう結果が欲しいのかよく分かりませんが、ループの外でやるべき事と、ループの中でやるべき事を分けてください。

Bash

1LIST1='folder1 folder2' 2LIST2='try1 try2 try3 try4' 3 4cat << EOF > ./result.html 5<html> 6<head> 7<body> 8<table border=1 align=center> 9EOF 10 11for j in $LIST1 12do 13for i in $LIST2 14do 15 16cat << EOF >> ./result.html 17 <tr> 18 <th></th> 19 <th>tmp-$i</th> 20 </tr> 21 22 <tr> 23 <td>tmp-$j</td> 24 <td><img src="./tmp-$j/tmp-$i/A.png" width="384"></img></td> 25 </tr> 26EOF 27done 28done 29cat << EOF >> ./result.html 30</table> 31</body> 32</head> 33</html> 34EOF

投稿2016/03/16 06:27

otn

総合スコア84538

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

berrypq77

2016/03/16 23:38

回答ありがとうございます。 ご指摘通りループの外と中でやるべきことを分けてみたら欲しい結果を得ることができました。
guest

0

実行すると 画像の場所がわかりした。
<td><img src="./tmp-folder1/tmp-try1/A.png" width="384"></img></td>
<td><img src="./tmp-folder1/tmp-try2/A.png" width="384"></img></td>
<td><img src="./tmp-folder1/tmp-try3/A.png" width="384"></img></td>
<td><img src="./tmp-folder1/tmp-try4/A.png" width="384"></img></td>
<td><img src="./tmp-folder2/tmp-try1/A.png" width="384"></img></td>
<td><img src="./tmp-folder2/tmp-try2/A.png" width="384"></img></td>
<td><img src="./tmp-folder2/tmp-try3/A.png" width="384"></img></td>
<td><img src="./tmp-folder2/tmp-try4/A.png" width="384"></img></td>

投稿2016/03/16 05:01

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

berrypq77

2016/03/16 05:14 編集

回答いただきありがとうございます。 1つ1つ.png の場所を記述すれば、きちんと表示されるのはわかります。 ですが、folderやtryの名前が計算によって変わるので、foler名やtry名を自動的に読み込みその中の画像(A.png)をhtml で表示しようとしています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問