0

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

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

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

谢谢!

添加澄清:

当然diff,不过,只是比较实际的文件名。我想知道如何指定我认为文件名,例如,在这种情况下,“HouseFile.txt”和“House.txt”是等效的

4

1 回答 1

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
于 2012-06-17T15:35:52.903 回答