当前位置: 首页 > 知识库问答 >
问题:

递归地在目录中按名称查找文件的重复项-Linux

冷涵忍
2023-03-14

我有一个文件夹,其中包含子文件夹和一些其他文件。

这些文件的命名方式如下

abc.DEF.xxxxxx.dat

我试图在上面的模式中找到只与“xxxxxx”匹配的重复文件,忽略其余的。分机。dat没有改变。但是abc和DEF的长度可能会改变。按周期划分的顺序也不会改变。

我猜我需要用下面的方式使用Find

find -regextype posix-extended -regex '\w+\.\w+\.\w+\.dat'

我需要帮助想出正则表达式。谢谢

例如:对于名为“epg”的文件。ktt。crwqdd。dat,我需要找到包含“crwqdd”的重复文件。

共有1个答案

樊飞飙
2023-03-14

您可以使用awk

find /path -type f -name '*.dat' | awk -F. 'a[$4]++'

解释:

find给出以下输出:

./abd.DdF.TTDFDF.dat
./cdd.DxdsdF.xxxxxx.dat
./abc.DEF.xxxxxx.dat
./abd.DdF.xxxxxx.dat
./abd.DEF.xxxxxx.dat

基本上,用计算机的话来说,你需要计算之间模式的出现次数。dat和下一个点,并打印至少第二次出现图案的线条。

为了实现这一点,我们将文件名按拆分。什么给了我们5(!)字段:

 echo ./abd.DEF.xxxxxx.dat | awk -F. '{print $1 " " $2 " " $3 " " $4  " " $5}'
  /abd DEF xxxxxx dat

注意第一个空字段。感兴趣的模式4美元

要计算4美元模式的出现次数,我们使用关联数组a并在每次出现时增加它的值。未优化的awk命令如下所示:

... | awk -F. '{{if(a[$4]++ > 1){print}}'

但是,您可以按照以下格式编写awk程序:

CONDITION { ACTION }

会给我们什么:

... | awk -F. 'a[$4]++ > 1 {print}'

printawk中的默认操作。它会打印整个当前行。因为这是默认操作,所以可以忽略它。还有

... | awk -F. 'a[$4]++' 

为了概括这个命令,我们可以说感兴趣的模式不是第四列,而是倒数第二列。这可以使用awkitsNF中的字段数来表示:

... | awk -F. 'a[$(NF-1)]++'

输出:

./abc.DEF.xxxxxx.dat
./abd.DdF.xxxxxx.dat
./abd.DEF.xxxxxx.dat

 类似资料:
  • 问题内容: 我正在编写一个Python备份脚本,需要在目录(及其子目录)中找到最旧的文件。我还需要仅将其过滤为* .avi文件。 该脚本将始终在Linux计算机上运行。有什么方法可以在Python中完成,还是运行一些Shell命令会更好? 目前,我正在努力获取特定分区上的可用空间,如果可用空间不足5 GB,我想开始删除最旧的文件,直到满足该条件为止。 问题答案: 嗯 Nadia的答案是接近你什么

  • 问题内容: 我正在尝试获取目录中所有文本文件的名称。如果目录中包含子目录,那么我也想在这些子目录中获取任何文本文件。我不确定如何继续执行任意数量的子目录。 现在,下面的代码仅获取当前目录中的所有文本文件以及该目录中的子目录。对于找到的每个子目录,它还会找到任何文本文件和更深的子目录。问题是,如果那些更深的子目录还有更深的子目录,那么我找不到所有的文本文件。这似乎是一个需要递归的问题,因为我不知道它

  • 问题内容: Python似乎具有复制文件的功能(例如)和复制目录的功能(例如),但是我还没有找到能够同时处理两者的函数。当然,检查要复制文件还是目录很简单,但这似乎很奇怪。 确实没有像unix命令那样工作的标准函数,即同时支持目录和文件以及递归复制吗?在Python中解决此问题的最优雅方法是什么? 问题答案: 建议您先致电,如果引发异常,请重试。

  • 问题内容: 我想将所有包含“特殊”一词的文件和目录重命名为“常规”。它应保持区分大小写,以使“特殊”不会变成“常规”。 如何在bash中递归执行此操作? 问题答案: 尝试执行此操作(要求> = 4): 测试正常后,卸下开关 还有其他相同名称的工具可能无法执行此操作,因此请小心。 如果运行以下命令() 结果是 并且不包含: 那么这似乎是正确的工具=) 如果不是,则将其设为默认值(通常已经是这种情况)

  • 我有一个包含子目录的目录,其中包含文本或二进制文件(如图片)。我需要找到重复的文件,可以在不同的子目录和不同的名称。所以,我需要使用一些算法来查看文件内部,而不依赖于文件名或文件长度。

  • 问题内容: 如何递归计算Linux目录中的文件? 我找到了这个: 但是,当我运行它时,它返回以下错误。 查找:路径必须在表达式之前:¦ 问题答案: 这应该工作: 说明: 仅包含文件。 ( 而不是)将命令的标准输出重定向到命令的标准输入。 (字数计数的缩写)在其输入(docs)上计算换行符,单词和字节。 仅计算换行符。 笔记: 更换用在当前文件夹要执行的命令。 您也可以删除,以在计数中包含目录(和符