我正在使用 wget 镜像一个网站。服务器上有一个命令的转储find /
,其中包括以下形式的文件名:
/dir1/ /dir1/page1.txt /dir1/page2.txt ...
镜像环非常大(100GB+),我想将本地输出与find
包含服务器端转储的文本文件进行比较,以便了解还剩下多少文件。
我正在考虑使用grep -v ...
orawk
但我不太确定如何去做。
有人可以帮我吗?
谢谢 !
答案1
您可以通过以下方式执行此操作comm
(使用bash
进程替换):
comm -13 <(find / | sort) <(sort server_dump)
这将显示服务器特有的文件。对于本地系统特有的文件:
comm -23 <(find / | sort) <(sort server_dump)
您可能还想添加-xdev
find 选项以阻止它比较其他文件系统上的文件,例如/proc
和/sys
。
答案2
我认为您不需要使用wget's
递归下载选项,因为您已经有需要下载的文件列表:
wget --input-file=./path/to/your/list --base=URL
通过这种方式,您只需首先遵循列表即可,因此下载的每个文件都将是列表中的下一个文件。因此,您只需检查最后下载的文件及其在列表中的位置即可随时找到进度。
但如果这不起作用:
{ find . ; sed 's/.*/.&/' list.file ; } |
sort | uniq -u
答案3
为什么不在find
两台主机上将 的输出转储到一个文件,然后diff
对这两个文件执行 a 操作?要获取文件数量,您可以使用 进行计数wc
。
答案4
从问题中尚不清楚服务器是否可以进行 SSH 访问。如果有的话,我会简单地用于rsync
这项工作。