如何find两台电脑上的文件/文件夹?

我的Linux电脑上有一个名为documentaries的文件夹。
我有SSH访问种子箱(也Linux)。

如何找出两台电脑都有哪些纪录片?

在种子箱上它是一个平面文件结构。 一些纪录片是文件,一些是包含许多文件的文件夹,但都在同一个文件夹中例如:

 data/lions_botswana.mp4 data/lions serengeti/S01E01.mkv data/lions serengeti/S01E02.mkv data/strosek_on_capitalism.mp4 data/something_random.mp4 

本地结构更有组织

 documentaries/animals/lions_botswana.mp4 documentaries/animals/lions serengeti/S01E01.mkv documentaries/animals/lions serengeti/S01E02.mkv documentaries/economy/strosek_on_capitalism.mp4 documentaries/something_random.mp4 

我不是在寻找类似diff命令,我正在寻找类似的命令(diff的对面),如果这样的命令存在的话。

根据Zumo de Vidrio的回答,我的评论是:

在一台电脑上

  cd directory1/; find | sort > filelist1 

在另一

  cd directory2/; find | sort > filelist2 

将它们复制在一个地方跑步:

  comm -12 filelist1 filelist2 

或作为一个班轮:

 ssh user@host 'cd remotedir/; find|sort' | comm -12 - <(cd localdir/; find|sort) 

编辑:多个文件夹,如下所示

在一台电脑上

  cd remotedir/; find | sort > remotelist 

在另一

  cd localdir/subdir1/; find > locallist1 cd -; cd localdir/subdir2/; find > locallist2 cd -; #... and so on sort locallist1 locallist2 > locallistall 

将它们复制在一个地方跑步:

  comm -12 remotelist locallistall 

或作为(现在很长)的一个班轮:

 ssh user@host 'cd remotedir/; find|sort' | comm -12 - <({cd localdir/subdir1/; find; cd -; cd localdir/subdir2/; find; cd -; cd localdir/subdir3/; find}|sort) 

将远程文件列表导出到本地文件:

 ssh user@seedbox 'find /path/to/data -type f -execdir echo {} ";"' > remote.txt 

注意:在Linux上,您必须使用绝对路径来避免领先./或者使用"$PWD"/data

然后grep find命令的结果:

 find documentaries/ -type f | grep -wFf remote.txt 

这将只显示远程存在的这些本地文件。

如果您想在本地生成类似的列表并比较两个文件,请尝试:

 find "$PWD"/documentaries/ -type f -execdir echo {} ';' > local.txt grep -wFf remote.txt local.txt 

然而上面的方法是不可靠的,因为一个文件可能有不同的大小。 如果文件具有相同的结构,则可以使用rsync来使文件保持最新状态。


要获得更可靠的解决方案,可以使用fdupes ,通过比较文件大小和MD5签名来查找存在于两个目录中的所有文件。

示例语法:

 fdupes -r documentaries/ data/ 

但是,这两个目录都需要在本地访问,所以你总是可以使用sshfs工具在本地安装远程目录。 然后你可以使用fdupes来查找所有重复的文件。 它也可以选择删除其他重复项( -d )。

将每台计算机的ls输出复制到同一个文件夹,然后在其上应用diff

在你的电脑里:

 ls -R documentaries/ > documentaries_computer.txt 

在种子箱中:

 ls -R documentaries/ > documentaries_seedbox.txt 

将这两个文件复制到相同的位置并执行:

 diff documentaries_computer.txt documentaries_seedbox.txt 

您可以使用sshfs挂载远程文件夹,然后您可以使用diff -r来查找它们之间的差异。

例如

 sshfs user@seedbox-host:/path/to/documentaries documentaries/ diff -rs /local/path/documentaries/animals documentaries/ | grep identical diff -rs /local/path/documentaries/economy documentaries/ | grep identical