如何将文件名的父目录普遍附加到文件名本身,例如
/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。
答案 0 :(得分: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
答案 1 :(得分: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 :(得分: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
答案 3 :(得分:0)
嗯,你可以使用sed
,但httrack
有能力,例如:
httrack http://earth.com/tree/apples/filename2.html -O /tmp/ -N100
根据文档:-N100
网站结构,没有www.domain.xxx / 。
但更多:
详细信息:选项N
N0
网站结构(默认)N1
网络中的HTML /,web / images /中的图像/其他文件N2
网页/ HTML中的HTML,网页/图片中的图片/其他N3
HTML / web /,images / other in web / N4
HTML / web /,images / other in web / xxx,其中xxx是文件扩展名
(例如,所有gif将被放置在web / gif上)N5
图片/ web / xxx中的其他图片和web / HTML中的HTML N99
web /中的所有文件,随机名称(小工具!)N100
网站结构,没有www.domain.xxx / N101
与N1相同,表示“网站”被网站名称取代N102
与N2相同,表示“网站”被网站名称取代N103
与N3相同,表示“网站”被网站名称取代N104
与N4相同,表示“网站”被网站名称取代N105
与N5相同,表示“网站”被网站名称取代N199
与N99相同,表示“网站”被网站名称取代N1001
与N1相同,表示没有“网络”目录N1002
与N2相同,表示没有“网络”目录N1003
与N3相同,表示没有“web”目录(为g选项设置选项)N1004
与N4相同,表示没有“网络”目录N1005
与N5相同,表示没有“网络”目录N1099
与N99相同,表示没有“网络”目录