删除主目录子目录中的所有重复文件

删除主目录子目录中的所有重复文件

我是 Linux 新手,想知道如何删除具有相同文件名的所有重复项但只保留一个原始文件?

例如我有以下内容:

dir_new_001 = rdt.txt
dir_new_002 = rdt.txt
dir_new_003 = rdt.txt

我只想在命令行中执行此操作。

答案1

那么,让我阐述一下我对这项任务的理解。

我们有一个文本文件“file.txt”,其中包含 3 列的行:

directory = file

相同的命名文件可以位于不同的目录中,我们必须生成行以仅保留一次具有相同名称的文件并删除其余的文件。正确的?

输入文件“file.txt”:

dir_new_001 = rdt.txt
dir_new_002 = rdt.txt
dir_new_003 = rdt.txt

dir_new_001 = rdt2.txt
dir_new_002 = rdt2.txt

dir_new_001 = rdt3.txt
dir_new_003 = rdt3.txt

要执行的一行代码(使用 /bin/sh 或 /bin/bash):

for i in $(cat file.txt|awk '{print $3}'|sort|uniq); do F=$(grep " = $i$" file.txt|tail -n+2|awk '{print $1"/"$3}'|xargs); [ -n "${F}" ] && echo "rm -f ${F}"; done|sort

结果:

rm -f dir_new_002/rdt2.txt
rm -f dir_new_002/rdt.txt dir_new_003/rdt.txt
rm -f dir_new_003/rdt3.txt

如果你想删除文件,你可以随时执行“rm”,而不是使用“echo”打印它。

答案2

如果您有权访问该fdupes实用程序,请发出以下命令:

$ fdupes -rdN dir/

r - recursive
d - preserver first file, delete other dupes
N - run silently (no prompt)

fdupes – 在 Linux 中查找和删除重复文件的命令行工具更多细节。

相关内容