2011-11-24 42 views
2

我在shell腳本中完全新手。我需要比較兩個目錄中的文件名並刪除具有相同名稱的文件。使用shell腳本刪除相同的文件

EG:

Directory1/ 
one 
two 
three 
four 

Directory2/ 
two 
four 
five 

運行腳本後的目錄是:

Directory1/ 
one 
three 

Diretory2/ 
five 

感謝

+0

我試過比較Directory1/Directory2 /但它顯示了我在每個目錄中的單數文件,而不是重複的文件。 – ulima69

+0

你只需要刪除同名的文件?不同的文件可以有相同的名稱。正確的做法是使用'cksum'或'md5'來確定文件是否確實是重複的。 –

+0

只有同一個名字纔好。內容對我來說不重要。 thaks。 – ulima69

回答

3

test -f測試文件是否存在:

cd dir1 
for file in * 
do 
    test -f ../dir2/$file && rm $file ../dir2/$file 
done 
cd .. 
2

快速和骯髒的:

while read fname 
do 
    rm -vf Directory{1,2}/"$fname" 
done < <(sort 
       <(cd Directory1/ && ls) 
       <(cd Directory2/ && ls) | 
     uniq -d) 

這是假定一些事情關於th電子文件名,但它應該讓你在那裏顯示輸入,以及類似的情況。

測試過,現在:

mkdir /tmp/stacko && cd /tmp/stacko 
mkdir Directory{1,2} 
touch Directory1/{one,two,three,four} Directory2/{two,four,five} 

捉迷藏的命令顯示:

removed `Directory1/four' 
removed `Directory2/four' 
removed `Directory1/two' 
removed `Directory2/two' 

而產生的樹是:

Directory1/one 
Directory1/three 

Directory2/five 
+0

爲什麼雙倍小於使用<<? – ulima69

+0

'<'表示輸入重定向,'<(cmd)'表示進程替換(打開命令的輸出,如文件(描述符)_);因此,'<(cmd)'重定向來自表示'cmd'輸出的_pseudo-file_(管道)的輸入。 – sehe

相關問題