通过文件名“同步”内容

通过文件名“同步”内容

好的,我已经将 5GB 的图像上传到 Dropbox,这些图像直接从相机中获取。

在另一个国家,我的朋友使用垃圾网络(他找到了一张包含图片的 CD),他将图片复制到他桌面上的一个文件夹中,然后开始整理图片;也就是删除坏的/不需要的图片。我不能要求他将 5GB 上传到我的个人 Dropbox 帐户,因为我用更快的网络上传需要一周时间。

是否有一个软件可以在我的 Windows 8 PC 上运行,用于获取文件名列表(目录递归,因为我给了他这个列表,并按每个事件的单独文件夹排序);当我再次在我的 Snow Leopard MacBook 上运行该软件时,就能够看到我朋友的电脑上删除了哪些图像;然后在我这边删除它们。

如果不存在这样的程序,我可以使用什么框架来编写这个程序(我正在 Mac 上开发)?您能给我什么建议?

答案1

这个答案借鉴了一些评论。让你的朋友跑

dir /b/s/a-d > dir.out

你跑

find . -print > find.out

规范化dir.outfind.out

  • 使行尾统一(例如 NL 或 CRLF),
  • 删除常见前缀(C:\Users\…./),
  • 将 中的反斜杠 ( \) 更改为斜杠 ( /) dir.out,然后
  • 对两个文件进行排序。

现在做

comm dir.out find.out

(您可能希望将其导入到分页器中,例如moreless。)输出将包含三列:

  1. 条目(文件名)仅出现在第一个文件(dir.out)中。不应该有任何条目;如果有,则说明你的朋友包含了一个他没有从你那里获得的文件,或者你没有完全规范化文件。(好吧,取决于你的朋友如何执行他的dir命令,dir.out文件本身可能会出现在第 1 列。)
  2. 仅存在于第二个文件 ( find.out) 中的条目。这些是您系统中存在的文件的名称,但您的朋友没有列出。换句话说,这些是您要删除的文件。
  3. 两个文件中都存在的条目。这应该与 相同dir.out

如果由于大小写不匹配而出现假阴性(“A”≠“a”),请使用选项comm重试该命令-f。您可能也会使用选项重复该sort命令-f

现在,输入comm -13 dir.out find.out。这种极其脑残的语法意味着“给我除第 1 列和第 3 列之外的所有正常输出”,换句话说,只输出第 2 列。如上所示,这是您要删除的文件列表,因此请将其输入管道xargs rm或类似的东西。


我假设您的文件名中没有任何乱码字符(例如空格、引号、“*”、“?”、“<”、“|”等)。(这应该不是问题;相机通常使用“DSCN1234.JPG”之类的文件名。)

答案2

你可以用GoodSync 连接(无关联)。使用此功能需要付费,但有 30 天的试用期,在此期间可以使用免费版本。

  1. 您在两侧安装 GoodSync(有 Mac、Windows 和 Linux 版本)。
  2. 您设置了 GoodSync Connect,它会建立一个直接链接,其中目录的信息通过中介进行传输,但文件本身不会传输。
  3. 在您这边,您设置了一个同步作业。
  4. 选择包含图片的 Dropbox 文件夹。
  5. 您的朋友将文件从 DVD 复制到一个目录。通过 GoodSync Connect 选择此文件夹。
  6. 您在同步作业中选择“分析”选项。GS 现在确定两个文件夹相同。这会在双方创建一个参考比较文件。(重要!)
  7. 然后你的朋友删除他不想要的图片。(或者,如果他已经这样做了,他会删除存储所有图片的文件夹的内容 - 除了 _gsdata 文件夹。他将修改过的文件夹放在那里。)
  8. 执行分析,它将向您显示预览。
  9. 如果一切顺利,请同步。GoodSync 将发挥其魔力。

笔记:

  • GoodSync 将检测文件和文件夹的移动和重命名,并且应该可以顺利运行。因此它不会尝试移动文件。(除非文件内容已被修改。但这就是您首先进行分析的原因!)
  • GoodSync 将删除您的朋友已删除的文件。它们将位于回收站中。
  • 哦,在此之前一定要备份。是的,认真的。或者在本地尝试。
  • 如果你不信任你的朋友,请在完成后禁用 GoodSync Connect 服务器。否则你的朋友将看到你的所有文件。(可能有办法解决这个问题,但我还没有找到。)

相关内容