我正在寻找一种简单的方法(一个命令或一系列命令,可能涉及find)在两个目录中查找重复文件,并将一个目录中的文件替换为另一个目录中文件的硬链接。
情况是这样的:这是一个文件服务器,多人在上面存储音频文件,每个用户都有自己的文件夹。有时,多人拥有完全相同的音频文件的副本。现在,这些都是重复的。我想让它们成为硬链接,以节省硬盘空间。
我有没有办法在目录中找到具有重复文件名的所有文件,而不管大小写(大写和/或小写)?
我试图找到一种方法来检查给定目录中的重复文件(即使名称不同),并将它们替换为指向第一次出现的符号链接。我试过,fdupes但它只列出了那些重复项。
这就是上下文:我正在根据自己的喜好自定义图标主题,我发现许多图标,即使它们在父文件夹中具有不同的名称和不同的位置,并且用于不同的目的,基本上都是相同的图片。由于在真正需要一个图像时应用相同的修改二十或三十次是多余的,我只想保留一个图像并符号链接所有其他图像。
例如,如果我fdupes -r ./在目录中运行testdir,它可能会返回以下结果:
./file1.png
./file2.png
./subdir1/anotherfile.png
./subdir1/subdir2/yetanotherfile.png
Run Code Online (Sandbox Code Playgroud)
鉴于此输出,我想只保留 file file1.png,删除所有其他文件并用指向它的符号链接替换它们,同时保留所有原始文件名。所以file2.png会保留它的名字,但会变成一个链接file1.png而不是重复。
这些链接不应指向绝对路径,而应相对于父testdir目录;即yetanotherfile.png会点../../file1.png,不/home/testuser/.icons/testdir/file1.png
我对涉及 GUI 和 CLI 的解决方案都感兴趣。fdupes我已经引用了它不是强制性的,因为它是我知道的一种工具,但我对使用其他工具的解决方案也持开放态度。
我很确定一个 bash 脚本来处理所有这些应该不难创建,但我不够专业,无法找出如何自己编写它。
我有两个地点/path/to/a和/path/to/b. 我需要在两个路径中查找重复的文件并仅删除/path/to/b项目中的项目。 rmlint生成相当大的删除脚本,但它包含两个路径(甚至空文件夹)中要删除的条目。
我使用rmlint以下参数运行以获得此结果,我认为该结果只会/path/to/a被选择删除:
rmlint -g -e -S p /path/to/a /path/to/b
Run Code Online (Sandbox Code Playgroud)