如何查找两台计算机上的文件/文件夹?

时间:2017-01-20 13:03:17

标签: linux shell

我的Linux计算机上有一个名为const std::vector<T> &mats的文件夹 我有访问seedbox(也是Linux)的SSH访问权限。

如何找出我在两台计算机上有哪些纪录片?

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

documentaries

本地结构更有条理

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相反)。

4 个答案:

答案 0 :(得分:3)

根据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)

答案 1 :(得分:3)

通过以下方式将远程文件列表导出到本地文件:

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)。

答案 2 :(得分:2)

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

在您的计算机中:

ls -R documentaries/ > documentaries_computer.txt

在seedbox中:

ls -R documentaries/ > documentaries_seedbox.txt

将两个文件复制到同一位置并执行:

diff documentaries_computer.txt documentaries_seedbox.txt

答案 3 :(得分:2)

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

E.g。

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