我想编写一个比较两个目录的脚本。 但是,文件名在其中一个中被修改。 所以目录A包含HouseFile.txt,CouchFile.txt,ChairFile.txt等文件 目录B包含House.txt,Couch.txt,Chair.txt(应该被视为与上述“等效”) 两者都可能包含新的,完全不同的文件。
有人能指出我在正确的方向吗?自从我完成脚本编写以来已经有一段时间了。
我尝试过使用diff
,我知道我需要使用某种形式的regex
来比较文件名,但我不知道从哪里开始。
谢谢!
已添加以澄清:
然而,当然diff
只是比较实际的文件名。我想知道如何指定我认为文件名,例如,在这个例子中,“HouseFile.txt”和“House.txt”等同于
答案 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