这个程序:
#!/bin/bash
find teste1 -type f -iname "**" | while read -r firstResult
do
find teste2 -type f -iname "**" | while read -r secondResult
do
firstName=${firstResult##*[/|\\]}
secondName=${secondResult##*[/|\\]}
if [[ $firstName == $secondName ]]; then
echo "$firstResult" "$secondResult" >> equal.lst
else
echo "$firstResult" "$secondResult" >> notEqual.lst
fi
done
done
我有一点问题,它工作得很好,但是,当文件夹就像这个例子:/teste1/TESTE.pub /teste2/TEstE.pub,它没有把文件放在上面“等于”。我怎样才能做到这一点?我一直试图在没有区分大小写的情况下进行查找,这意味着它应该可以工作,但它只是不承认。
请帮忙。
也许我应该将所有文件名“转换”为其中一个案例然后进行搜索?你认为这会解决我的问题吗?在逻辑方面,它会起作用,因为所有文件都具有相同的外壳。
答案 0 :(得分:1)
好的,所以,我通过将所有文件名更改为小写来解决我遇到的问题。
#!/bin/bash
find teste1 -type f | tr [A-Z] [a-z] | while read -r firstResult
do
find teste2 -type f | tr [A-Z] [a-z] | while read -r secondResult
do
firstName=${firstResult##*[/|\\]}
secondName=${secondResult##*[/|\\]}
if [[ $firstName == $secondName ]]; then
echo "$firstResult" "$secondResult" >> equal.lst
else
echo "$firstResult" "$secondResult" >> notEqual.lst
fi
done
done
现在可以完全按照我的意愿匹配和保存文件。如果其他人想知道,如果您希望此FIND
区分大小写,请删除tr [A-Z] [a-z]
命令。
答案 1 :(得分:1)
无需使用tr
,bash有自己的内置案例转换(${var,,}
)。此外,查找不需要-iname **
,默认情况下将其保留为匹配所有文件。
#!/bin/bash
find teste1 -type f | while read -r firstResult
do
find teste2 -type f | while read -r secondResult
do
firstName="${firstResult##*[/|\\]}"
secondName="${secondResult##*[/|\\]}"
if [[ "${firstName,,}" == "${secondName,,}" ]]; then
echo "$firstResult" "$secondResult" >> equal.lst
else
echo "$firstResult" "$secondResult" >> notEqual.lst
fi
done
done