Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Bash脚本:将父目录附加到文件名_Regex_Linux_Bash_Sed - Fatal编程技术网

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

Regex Bash脚本:将父目录附加到文件名,regex,linux,bash,sed,Regex,Linux,Bash,Sed,如何将文件名的父目录普遍附加到文件名本身,例如 /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.h

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

/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将文件保存为完整的URL。

你的意思是

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


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

$ 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

您还没有定义要附加多少父目录。将其作为运行时参数,可以使用以下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

当然,您可以使用
sed
,但是
httrack
是有能力的,例如:

httrack http://earth.com/tree/apples/filename2.html -O /tmp/ -N100
根据文档:
-N100
站点结构,没有www.domain.xxx/

但更多:

详细信息:选项N

  • N0
    站点结构(默认)
  • N1
    web中的HTML/,图像/web中的其他文件/图像/
  • N2
    web中的HTML/HTML,web中的image/other/images
  • N3
    web中的HTML/,web中的图像/其他/
  • N4
    HTML-in-web/,images/other-in-web/xxx,其中xxx是文件扩展名 (例如,所有gif都将放在web/gif上)
  • N5
    Images/other in web/xxx和HTML in web/HTML
  • N99
    web/中的所有文件,带有随机名称(gadget!)
  • 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”目录

那么你想在
earth.com
之前删除所有内容吗?那将保存一个目录结构,不是吗?我需要像这样命名文件:“test/test2/test3.html”也许我应该补充一点,我有一个巨大的列表和文件夹结构,所有文件的名称都不同,总共大约有10.000个文件。
httrack http://earth.com/tree/apples/filename2.html -O /tmp/ -N100