【发布时间】:2015-07-20 18:03:23
【问题描述】:
我需要在一个文件很多的linux文件夹结构中找到同名但内容不同的文件。
这样的东西部分地完成了工作,我如何消除具有不同内容的文件?
#!/bin/sh
dirname=/path/to/directory
find $dirname -type f | sed 's_.*/__' | sort| uniq -d|
while read fileName
do
find $dirname -type f | grep "$fileName"
done
(How to find duplicate filenames (recursively) in a given directory? BASH)
非常感谢!
【问题讨论】:
-
如果你有 3 个文件都名为
spam.txt,并且它们都有不同的内容,你想删除哪 2 个? -
您是否正在寻找执行此操作的 python 代码?
-
无论你想出什么规则,你显然需要一些代码来应用该规则......除非规则真的是“我不在乎,只要杀了他们两个,保留另一个”。在这种情况下,这很容易。你有一个重复文件的列表。您想删除任意选择的除一个以外的所有内容。所以只需从列表中弹出第一个,然后删除所有其余的。
-
如果规则是“保留最旧的”,那么您需要首先按时间排序列表(如果您只是做了@ 987654324@ by
-name而不是find的所有内容,然后是grep的名称...),或者只是stat循环中的每个文件并从列表中删除最旧的文件。 (我认为这在 Python 中要比在 bash 中容易得多……) -
感谢您的快速cmets。 @abarnert,我只想列出它们并自己消除它们。埃里克什么都好。