You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于cp -v的输出,按原复制顺序续传桌面Sambashare共享文件至笔记本?

如何基于cp -v的输出,按原复制顺序续传桌面Sambashare共享文件至笔记本?

兄弟误关笔记本导致复制中断确实头疼,不过好在你用了cp -v,有输出记录可以利用,咱们一步步来搞定续传:

第一步:定位最后成功复制的文件

首先得明确最后一个已经复制完成的文件:

  • 如果你当时把cp -v的输出重定向到了日志文件(比如当初用的是cp -v /path/to/source/* /path/to/dest > copy_log.txt),直接用tail -n 1 copy_log.txt就能看到最后一行输出,格式大概是'源文件路径' -> '目标文件路径',把这里的源文件名记下来(比如photo_2024.jpg)。
  • 如果没保存日志,就去终端的滚动记录里找最后一行cp -v的输出,同样记下那个源文件名。
  • 保险起见,先去目标目录确认这个文件确实存在且完整,可以用ls -l ~/laptop_files/目标文件名对比源文件的大小,确保已经复制完成。

第二步:生成剩余待复制的文件列表(保持原顺序)

因为cp默认是按照Shell展开文件的顺序(通常是字母顺序)来复制的,咱们要复刻这个顺序,只保留最后复制文件之后的内容:

  1. 先把源目录的所有文件按原顺序导出到一个列表文件:
    ls -1 /mnt/sambashare/desktop_files > full_file_list.txt
    
    这里ls -1是让每个文件占一行,顺序和你当初用cp *时的顺序完全一致。
  2. 从列表里截取最后复制文件之后的所有文件(跳过已复制的那个):
    假设最后复制的文件是photo_2024.jpg,用awk命令直接生成剩余列表:
    awk '/photo_2024.jpg/{f=1;next}f' full_file_list.txt > remaining_files.txt
    
    这条命令的意思是:找到匹配photo_2024.jpg的行后,开始标记后续行,跳过当前行(因为已经复制了),把后面的所有行输出到remaining_files.txt里。

第三步:按原顺序续传文件

现在用这个剩余列表来批量复制,推荐用while循环(能处理带空格、特殊字符的文件名,比xargs更稳妥):

while IFS= read -r filename; do
    cp -v "/mnt/sambashare/desktop_files/$filename" "~/laptop_files/"
done < remaining_files.txt

执行这个脚本后,就会从上次中断的位置继续,完全按照当初cp的顺序来复制。

额外推荐:用rsync更省心(如果对顺序要求不严格)

如果你不是必须严格遵循当初cp的复制顺序,rsync是更可靠的选择——它会自动对比源和目标目录,只复制缺失或不完整的文件,还支持断点续传,命令很简单:

rsync -av --progress /mnt/sambashare/desktop_files/ ~/laptop_files/

这里-a是递归+保留权限等属性,-v显示详细信息,--progress显示复制进度,用它可以不用手动找最后复制的文件,直接搞定所有未完成的复制。

备注:内容来源于stack exchange,提问作者Dragin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 11:38:08