好的,我已经将 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.out
并find.out
:
- 使行尾统一(例如 NL 或 CRLF),
- 删除常见前缀(
C:\Users\…
和./
), - 将 中的反斜杠 (
\
) 更改为斜杠 (/
)dir.out
,然后 - 对两个文件进行排序。
现在做
comm dir.out find.out
(您可能希望将其导入到分页器中,例如more
或less
。)输出将包含三列:
- 条目(文件名)仅出现在第一个文件(
dir.out
)中。不应该有任何条目;如果有,则说明你的朋友包含了一个他没有从你那里获得的文件,或者你没有完全规范化文件。(好吧,取决于你的朋友如何执行他的dir
命令,dir.out
文件本身可能会出现在第 1 列。) - 仅存在于第二个文件 (
find.out
) 中的条目。这些是您系统中存在的文件的名称,但您的朋友没有列出。换句话说,这些是您要删除的文件。 - 两个文件中都存在的条目。这应该与 相同
dir.out
。
如果由于大小写不匹配而出现假阴性(“A”≠“a”),请使用选项comm
重试该命令-f
。您可能也会使用选项重复该sort
命令-f
。
现在,输入comm -13 dir.out find.out
。这种极其脑残的语法意味着“给我除第 1 列和第 3 列之外的所有正常输出”,换句话说,只输出第 2 列。如上所示,这是您要删除的文件列表,因此请将其输入管道xargs rm
或类似的东西。
我假设您的文件名中没有任何乱码字符(例如空格、引号、“*”、“?”、“<”、“|”等)。(这应该不是问题;相机通常使用“DSCN1234.JPG”之类的文件名。)
答案2
你可以用GoodSync 连接(无关联)。使用此功能需要付费,但有 30 天的试用期,在此期间可以使用免费版本。
- 您在两侧安装 GoodSync(有 Mac、Windows 和 Linux 版本)。
- 您设置了 GoodSync Connect,它会建立一个直接链接,其中目录的信息通过中介进行传输,但文件本身不会传输。
- 在您这边,您设置了一个同步作业。
- 选择包含图片的 Dropbox 文件夹。
- 您的朋友将文件从 DVD 复制到一个目录。通过 GoodSync Connect 选择此文件夹。
- 您在同步作业中选择“分析”选项。GS 现在确定两个文件夹相同。这会在双方创建一个参考比较文件。(重要!)
- 然后你的朋友删除他不想要的图片。(或者,如果他已经这样做了,他会删除存储所有图片的文件夹的内容 - 除了 _gsdata 文件夹。他将修改过的文件夹放在那里。)
- 执行分析,它将向您显示预览。
- 如果一切顺利,请同步。GoodSync 将发挥其魔力。
笔记:
- GoodSync 将检测文件和文件夹的移动和重命名,并且应该可以顺利运行。因此它不会尝试移动文件。(除非文件内容已被修改。但这就是您首先进行分析的原因!)
- GoodSync 将删除您的朋友已删除的文件。它们将位于回收站中。
- 哦,在此之前一定要备份。是的,认真的。或者在本地尝试。
- 如果你不信任你的朋友,请在完成后禁用 GoodSync Connect 服务器。否则你的朋友将看到你的所有文件。(可能有办法解决这个问题,但我还没有找到。)