【问题标题】:Bash Script: Append parent directories to filenamesBash 脚本:将父目录附加到文件名
【发布时间】:2012-06-04 12:19:22
【问题描述】:

如何将文件名的父目录普遍附加到文件名本身,例如

/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

理想情况下,所有这些都位于一个文件夹中。这可以通过 bash 脚本和 sed 来完成吗?

我为什么要这样做:我正在使用 httrack 镜像一个巨大的网站,而 httrack 在其相对目录结构中保存了一个文件,我无法让 httrack get 将文件保存为完整的 URL。

【问题讨论】:

  • 所以你想删除earth.com之前的所有内容?

标签: regex linux bash sed


【解决方案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

【讨论】:

    【解决方案2】:

    由于您使用的是固定字段,因此您可以使用大量工具。

    $ 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
    

    【讨论】:

    • 也许我应该补充一点,我有一个巨大的列表和文件夹结构,所有名称都不同,总共大约 10.000 个文件。
    【解决方案3】:

    你是说

    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
    

    【讨论】:

      【解决方案4】:

      嗯,你可以用sed 来做,但是httrack 可以,例如:

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

      根据文档:-N100站点结构,没有 www.domain.xxx/

      还有更多:

      详细信息:选项 N

      • N0 站点结构(默认)
      • N1 web/ 中的 HTML,web/images/ 中的图像/其他文件
      • N2 web/HTML 中的 HTML,web/images 中的图像/其他
      • N3web/ 中的 HTML,web/ 中的图像/其他
      • N4 web/ 中的 HTML,web/xxx 中的 images/other,其中 xxx 是文件扩展名 (例如,所有 gif 都将放在 web/gif 上)
      • N5 web/xxx 中的图像/其他和 web/HTML 中的 HTML
      • N99 web/ 中的所有文件,名称随机(小工具!)
      • N100 站点结构,没有 www.domain.xxx/
      • N101 与 N1 相同,只是将“web”替换为站点名称
      • N102 与 N2 相同,只是将“web”替换为站点名称
      • N103 与 N3 相同,只是将“web”替换为站点名称
      • N104 与 N4 相同,只是将“web”替换为站点名称
      • N105 与 N5 相同,只是将“web”替换为站点名称
      • N199 与 N99 相同,只是将“web”替换为站点名称
      • N1001 与 N1 相同,只是没有“web”目录
      • N1002 与 N2 相同,只是没有“web”目录
      • N1003 与 N3 相同,只是没有“web”目录(为 g 选项设置了选项)
      • N1004 与 N4 相同,只是没有“web”目录
      • N1005 与 N5 相同,只是没有“web”目录
      • N1099 与 N99 相同,只是没有“web”目录

      【讨论】:

      • 那会保存一个目录结构,不是吗?我需要像这个文件一样命名文件:“test/test2/test3.html”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 2019-01-18
      • 2021-06-05
      • 2015-08-02
      • 1970-01-01
      相关资源
      最近更新 更多