1

ファイル名の親ディレクトリをファイル名自体に普遍的に追加するにはどうすればよいですか。

/home/username/Mirrors/earth.com/tree/apples/filename2.html
/home/username/Mirrors/earth.com/grass/flower/leave/filename1.html

後で次のような名前のファイルにする必要があります。

earth.com/tree/apples/filename2.html
earth.com/earth/grass/flower/leave/filename1.html

理想的には、すべてを 1 つのフォルダーに配置します。これは bash スクリプトと sed で実行できますか?

なぜこれを行うのか: httrack を使用して巨大な Web サイトをミラーリングしており、httrack は相対ディレクトリ構造内にファイルを保存します。

4

4 に答える 4

1

追加する親ディレクトリの数を定義していません。これをランタイム引数として作成すると、次のawkコマンドを使用できます。

echo /home/username/Mirrors/earth.com/tree/apples/filename2.html | 
awk  -F '/' -v D=3 '{for (i=D;i>=0;i--) {printf("%s", $(NF-i)); if (i>0) printf("/")}
 print "";}'

出力

earth.com/tree/apples/filename2.html
于 2012-06-04T12:36:24.640 に答える
1

固定フィールドで作業しているため、多数のツールを使用できます。

$ sed 's#/home/username/Mirrors##' file
/earth.com/tree/apples/filename2.html
/earth.com/grass/flower/leave/filename1.html

$ cut -c24- file
earth.com/tree/apples/filename2.html
earth.com/grass/flower/leave/filename1.html
于 2012-06-04T12:32:03.253 に答える
0

まあ、あなたはでそれを行うことができますが、sed可能httrackです、例えば:

httrack http://earth.com/tree/apples/filename2.html -O /tmp/ -N100

ドキュメントによると、-N100 www.domain.xxx/ なしのサイト構造

しかし、より多くの:

詳細: オプション N

  • N0サイト構造 (デフォルト)
  • N1web/ 内の HTML、web/images/ 内の画像/その他のファイル
  • N2Web 内の HTML/HTML、画像/Web 内のその他/画像
  • N3HTML in web/, images/other in web/
  • N4HTML は web/ に、images/other は web/xxx に、xxx はファイル拡張子です (たとえば、すべての gif は web/gif に配置されます)。
  • N5web/xxx の Images/other と web/HTML の HTML
  • N99ランダムな名前の web/ 内のすべてのファイル (ガジェット !)
  • N100www.domain.xxx/ を含まないサイト構造
  • N101「web」がサイトの名前に置き換えられている点を除いて、N1 と同じです。
  • N102「web」がサイトの名前に置き換えられていることを除いて、N2 と同じです。
  • N103「web」がサイトの名前に置き換えられていることを除いて、N3 と同じです。
  • N104「web」がサイトの名前に置き換えられていることを除いて、N4 と同じです。
  • N105「web」がサイトの名前に置き換えられている点を除いて、N5 と同じです。
  • N199「web」がサイトの名前に置き換えられている点を除いて、N99 と同じです。
  • N1001「web」ディレクトリがないことを除いて、N1 と同じ
  • N1002「web」ディレクトリがないことを除いて、N2 と同じ
  • N1003「web」ディレクトリがないことを除いて、N3 と同じ (g オプションに設定されたオプション)
  • N1004「web」ディレクトリがないことを除いて、N4 と同じ
  • N1005「web」ディレクトリがないことを除いて、N5 と同じ
  • N1099「web」ディレクトリがないことを除いて、N99 と同じです。
于 2012-06-04T12:40:37.100 に答える
0

ということですか

sed 's|^/home/username/Mirrors/||'

?

for f in /home/username/Mirrors/earth.com/*; do 
  mv $f `echo "$f" | sed 's|^/home/username/Mirrors/|/new/path/|'`;
done
于 2012-06-04T12:31:46.453 に答える