我正在合并两个电影库,并希望通过 bash 脚本手动“删除重复”。
到目前为止,这是我的思考过程:
我可以以此为基础,所以如果我能以某种方式将删除部分分开,我就可以在此基础上进行构建。虽然我可以使用 ffmpeg 来检查视频并选择更好的视频,但我猜测更大的尺寸 = 最佳选择并且更易于编码。
我发布了 Software Rec,但没有得到我想要的东西,所以我意识到 bash 是我最好的选择,但是我的“查找”知识有限,而且我找到的大多数答案都很复杂,我认为这应该是一个简单的事物。
这是我写的一种很好的方法,可以找到忽略扩展名的重复文件:
find . -exec bash -c 'basename "$0" ".${0##*.}"' {} \; | sort | uniq --repeated
Run Code Online (Sandbox Code Playgroud)
然后我将它包装在这个循环中,为每个文件找到两个文件中较小的一个:
for i in $(find . -exec bash -c 'basename "$0" ".${0##*.}"' {} \; | sort | uniq --repeated); do find . -name "$i*" -printf '%s %p\n' | sort -n | head -1 | cut -d ' ' -f 2-; done
Run Code Online (Sandbox Code Playgroud)
最后再循环一次(交互地,rm -i
因此在每个循环之前都有一个提示)删除所有这些文件:
for j in $(for i in $(find . -exec bash -c 'basename "$0" ".${0##*.}"' {} \; | sort | uniq --repeated); do find . -name "$i*" -printf '%s %p\n' | sort -n | head -1 | cut -d ' ' -f 2-; done); do rm -i "$j"; done
Run Code Online (Sandbox Code Playgroud)
由于这涉及find
在您的目录上执行两个s,因此肯定有更好的方法。但这应该适用于简单的情况。它还假设您在当前目录下工作,如果您想在不同的目录上执行命令,只需将.
参数更改为两个find
命令即可。