使用脚本比较具有修改文件名的目录?

时间:2012-06-17 15:27:45

标签: regex bash directory

我想编写一个比较两个目录的脚本。 但是,文件名在其中一个中被修改。 所以目录A包含HouseFile.txt,CouchFile.txt,ChairFile.txt等文件 目录B包含House.txt,Couch.txt,Chair.txt(应该被视为与上述“等效”) 两者都可能包含新的,完全不同的文件。

有人能指出我在正确的方向吗?自从我完成脚本编写以来已经有一段时间了。

我尝试过使用diff,我知道我需要使用某种形式的regex来比较文件名,但我不知道从哪里开始。

谢谢!

已添加以澄清:

然而,当然diff只是比较实际的文件名。我想知道如何指定我认为文件名,例如,在这个例子中,“HouseFile.txt”和“House.txt”等同于

1 个答案:

答案 0 :(得分:2)

如果我理解正确,这是比较a到b的可能解决方案:

mkdir a b ; touch a/HouseFile.txt a/ChairFile.txt a/CouchFile.txt a/SomeFile.txt b/House.txt b/Chair.txt b/Couch.txt b/Sofa.txt

for file in a/*(.); do [[ ! -f b/${${file##*/}:fs@File@} ]] && echo $file ; done

输出: a/SomeFile.txt

我不清楚:差异模式是严格的'文件'还是任意字符串?

编辑:之前是zsh。这是一个bash:

find a -type f -maxdepth 1 | while read file; do
  check=$(echo $file | sed -r -e 's@(.*)/(.*)@\2@' -e "s@File@@") ;
  [[ ! -f b/${check} ]] && echo $file
done

使用参数展开代替sed

find a -type f -maxdepth 1 | while read file; do
  check=${file/%File.txt/.txt} #end of file name changed
  check=${check/#*\//} #delete path before the first slash
  [[ ! -f b/${check} ]] && echo $file
done