相対パスを、ルートパスに一括変換する方法を教えてください。


あるフォルダの中に、たくさんのHTMLファイルがあります。
階層構造もそれぞれ深くなっています。

それらのHTMLには<img>タグで画像を指定していますが、
そこでの指定方法(URL)が相対パスとなっています。

例:
../img/a.jpg
../../image/b.jpg

今回、すべてのHTMLでの画像指定(URL)を
ルートパスに一括変換したいのですが
何か良い方法をご存知でしょうか。

複数HTMLファイルを一括でルートパスに変換できる方法であれば、
100ポイントの回答ポイントとは別に400ポイントをお送りします。

どうぞ宜しくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:2009/11/21 00:58:39
  • 終了:2009/11/22 12:58:07

回答(6件)

id:h0nda No.1

420回答回数126ベストアンサー獲得回数72009/11/21 01:14:02

ポイント14pt

GrepReplace(フリーソフト)を使用してみてはいかがでしょうか?

http://www.forest.impress.co.jp/lib/sys/file/filesearch/grprplc....



一括というのが一回の処理ということでしたら的外れな回答になってしましますが…

id:rimk

サイト制作をした事のある方なら分かると思うのですが、単純に相対パスを置換するだけでは、ルートパスとしては成立しないんです。

置換するソフトが、サイト構造(ルートディレクトリ)を把握している必要があるんですね。

2009/11/21 01:31:17
id:snow_leopard No.2

snow_leopard回答回数294ベストアンサー獲得回数222009/11/21 02:04:34

ポイント28pt

そのフォルダがwebサーバー(ローカルでも可)上にあるなら、wgetというダウンロードツールを使うことで、相対パスをすべて絶対パスに変換してhtmlを収録することができます。

http://d.hatena.ne.jp/snakepit2002jp/20090709/1247129962

id:rimk

月曜日、会社で試してみます・・・・が、

これだとAタグのhref属性まで一緒に変換されてしまわないでしょうか?

2009/11/21 02:10:03
id:snow_leopard No.3

snow_leopard回答回数294ベストアンサー獲得回数222009/11/21 06:02:15

ポイント14pt

たんなる文字列の置き換えなら、ふつうはsedというコマンドでバッチ処理するわけですが、スクリプトを書かないといけないので、すぐには使いこなせないと思います。

ですので、こういうフォルダ単位で一括置換できるソフトをつかえば早いと思います。

http://www.vector.co.jp/soft/win95/util/se142895.html

id:rimk

前述しているように、ただの置換ではルート処理できないのです

同じフォルダの中のhtmlであっても、必ずしも同じパス指定とは限りません

2009/11/21 12:00:48
id:azumi1975 No.4

azumi1975回答回数337ベストアンサー獲得回数162009/11/21 07:57:17

ポイント13pt

DreamWaverを使ってるのなら、以下のようなプラグインがあります。

http://tukihatu.6.ql.bz/pg/siteroot.html

id:rimk

あー、コメント欄に書いてます。

2009/11/21 11:58:36
id:tezcello No.5

tezcello回答回数459ベストアンサー獲得回数692009/11/21 14:16:48

ポイント41pt

PHPとかでスクリプトを書いてみては?

realpath()

http://jp2.php.net/manual/ja/function.realpath.php

という関数も用意されているので、

各ディレクトリにカレントディレクトリを移し、

そのディレクトリ内のファイルを読み込み

画像ファイルの場所を realpath() で書き換え

という感じでいいのかと。

(もちろんドキュメントルートの実際の位置との調整をしなければいけませんが)


> 絶対パスというのはhttp://から始まるものという認識ですね。

絶対パスというのは、ルートディレクトリからの道筋(=パス)を示すものと認識しています。

何歩か譲って、そのプロトコルやサーバ(マシンではなくサービスという意味で)のルートからというのもアリでしょうが。

プロトコルやサーバ名等を含む物としては URI (URL) と表す方が RFC 的にも良さそうに思います。

絶対パス、相対パスという表現は他でも使われますし、サーバ名までとそれ以降とは分けた方が周りとの整合が良さそうに思います。

相対パスではない事を明確にしたいのなら、フルパスが適当かと。

id:rimk

たいへん参考になります。ありがとうございます。

2009/11/22 00:37:02
  • id:u1p
    ルートパスなんて言う表現があるんですね。勉強になりました。
    (1993年からHTMLを書いてますが、絶対パスと言う言い方しか知らなかった。)

    何らかのウェブオーサリングツールに一括して食わせれば、できるんじゃないかな…。
    構造が簡単なら、簡単なPerlスクリプトを作って、試してみても良いんですが。
    (以前引き継いだプロジェクトで、../../a/../b/c/../index.html なんて言うのに出会ったことがあります…。)
  • id:rimk
    絶対パスというのはhttp://から始まるものという認識ですね。
    とはいえ私も比較的最近まで絶対パスという言い方でしたが・・。

    Dreamweaverを使えばルート指定にできるのですが、手動なので枚数が多いと(今回は350HTML)とても大変なんです。

    ネット上でちょうど良いツールもあったのですが、DreamweaverCS3には対応していなかったです。
    http://tukihatu.6.ql.bz/pg/siteroot.html

    そこで今回の質問に至ります。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません