我的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相反)。
答案 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