我的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