首页 文章

Bash脚本:将父目录附加到文件名

提问于
浏览
1

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

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

shoud后来是这样命名的文件:

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

理想情况下,所有位于一个文件夹 . 这可以用bash脚本和sed完成吗?

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

4 回答

  • 0

    那么你还没有定义你想要追加多少个父目录 . 将其作为运行时参数,您可以使用以下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 "";}'
    

    OUTPUT

    earth.com/tree/apples/filename2.html
    
  • 0

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

    $ 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
    
  • 1

    你的意思是

    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
    
  • 1

    好吧,你可以用 sed 来做,但 httrack 是有能力的,例如:

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

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

    还有一点:

    Details: Option N

    • N0 网站结构(默认)

    • N1 网页上的HTML /,网页/图片中的图片/其他文件/

    • N2 网页/ HTML中的HTML,网页/图像中的图像/其他内容

    • N3 网页中的HTML /,图片/其他网页/

    • N4 web /中的HTML,web / xxx中的图像/其他,其中xxx是文件扩展名(例如,所有gif将被放置到web / gif上)

    • N5 web / xxx中的图像/其他和web / HTML中的HTML

    • N99 web /中的所有文件,随机名称(小工具!)

    • N100 网站结构,没有www.domain.xxx/

    • N101 与N1相同,表示"web"被网站名称取代

    • N102 与N2相同,表示"web"被网站名称取代

    • N103 与N3相同,表示_1085408被网站名称取代

    • N104 与N4相同,表示_1085410被网站名称取代

    • N105 与N5相同,表示"web"被网站名称取代

    • N199 与N99相同,表示_1085414被网站名称取代

    • N1001 与N1相同,表示没有"web"目录

    • N1002 与N2相同,表示没有"web"目录

    • N1003 与N3相同,表示没有"web"目录(为g选项设置选项)

    • N1004 与N4相同,表示没有"web"目录

    • N1005 与N5相同,表示没有"web"目录

    • N1099 与N99相同,表示没有"web"目录

相关问题