2014-01-29 41 views
0

這個程序:shell腳本 - 不區分大小寫匹配

#!/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,它不會將文件置於「相等」。我怎樣才能做到這一點?我一直試圖做這個沒有區分大小寫的查找,這意味着它應該可以工作,但它只是不承認。

請幫忙。

也許我應該只是「改造」的所有文件名的案例之一,然後做搜索?你認爲這會解決我的問題?就邏輯而言,它將起作用,因爲所有文件都具有相同的外殼。

回答

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 
+0

它提供了以下 - > teste.sh:$ {的firstName ,,}:壞替代 – Gabriel

+0

我認爲這是由於在腳本不同的錯誤,我想你'read'是在子shell執行。如果我是對的,你的答案會給出空的'.lst'文件。等一下,我查這個... – Graeme

+0

嗯..在「.LST」因爲它是,是不是空的,它總是保存的文件。問題發生在整個「.lst」文件之前,不是?我得到的錯誤是在「如果」命令,或者這就是在我看來:) – Gabriel

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]命令。

相關問題