我是 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)