在目录中查找具有配对名称的文件

在目录中查找具有配对名称的文件

我正在运行可变大小和内容测试集的测试。数据文件经常添加和删除。我正在寻找一种自动收集文件列表的方法。

所有文件都位于D;的子目录中我需要将完整目录和名称添加到文本文件中。但是,我只需要那些具有“配对”文件的文件,该文件具有相同的文件名但不同的扩展名(所以......不同的文件名,但以结构化方式)。所以,如果有MyFileName.AMyFileName.B,那么我想D/.../MyFileName添加到文件列表中。

.A没有.B文件的文件,但没有.B没有.A文件的文件。如果 a.A有一个.B文件,则两个文件位于同一目录中。

有什么建议吗?

答案1

如果没有文件名包含任何换行符,您可以执行以下操作:

find D -type f \( -name '*.A' -o -name '*.B' \) |
  sed 's/\.[^.]*$//' |
  sort |
  uniq -d >paired_files

.B这应该适用于有文件而没有文件的更一般情况.A

要使用最新的 GNU 工具处理任何文件名:

find D -type f \( -name '*.A' -o -name '*.B' \) -print0 |
  sed -z 's/\.[^.]*$//' |
  sort -z |
  uniq -dz |
  tr '\0' '\n' >paired_files

答案2

如果您的陈述是正确的“没有 .A 文件就没有 .B 文件。”,则获取 .B 文件列表并删除扩展名。

find $directory-to-search -name "*.B" | sed -r -e "s~(.*)\.B~\1~g"

答案3

zsh

print -rl mydir/**/*.A(.e_'REPLY=$REPLY:r; [[ -f $REPLY.B ]]'_)

:r$REPLY删除扩展名,因此如果was的内容mydir/somedir/somefile.A在运行后REPLY=$REPLY:r其内容变为mydir/somedir/somefile;
其余的类似于这个答案

相关内容