2012-06-17 98 views
0

我想編寫一個比較兩個目錄的腳本。 但是,其中一個文件名被修改。 所以目錄A包含像HouseFile.txt,CouchFile.txt,ChairFile.txt文件 指南B含有House.txt,Couch.txt,Chair.txt(其應被視爲「等效」上述) 兩者也可包含新的完全不同的文件。使用腳本比較具有修改文件名的目錄?

有人能指出我在這裏向正確的方向?自從我完成腳本以來已經有一段時間了。

我試過使用diff,我知道我需要使用某種形式的regex來比較文件名,但我不知道從哪裏開始。

謝謝!

新增澄清:

當然diff,然而,只是比較實際文件名。我想知道如何指定我認爲文件名稱,例如,在這種情況下,「HouseFile.txt」和「House.txt」等效爲

+0

你想'diff'後得到了什麼?你有多遠? – Alexander

+0

當然,差異只是比較實際的文件名。我想知道如何指定我認爲文件名稱,例如,在這種情況下,「HouseFile.txt」和「House.txt」等效。 – franka

回答

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##*/}:[email protected]@} ]] && echo $file ; done

輸出: a/SomeFile.txt

什麼是我不明白:是的區別拍tern嚴格'文件'或任何任意字符串?

編輯:以前是爲zsh中。這是一個可以讓bash:

find a -type f -maxdepth 1 | while read file; do 
    check=$(echo $file | sed -r -e '[email protected](.*)/(.*)@\[email protected]' -e "[email protected]@@") ; 
    [[ ! -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 
+0

嚴格「文件」。 – franka

+0

不幸的是,我得到一個語法錯誤'意想不到''爲您的答案。你可以仔細檢查一下嗎?謝謝! – franka

+0

對不起,這是zsh而不是bash。讓我爲你檢查一個... – Bgs

相關問題