2016-11-09 161 views
0

我想比較兩個文件夾以查看裏面的文件是否相同。如果它是相同的,那麼我將這些文件移動到另一個文件夾中。例如:使用shell腳本比較兩個文件夾中的文件

f1      f2 
    ------    -------- 
    test1     test3 
    test2     test4 
         test1 

這裏test1.txt文件可在這兩個文件夾,所以我需要那個文件移動到另一個文件夾。

這是如何使用shell腳本完成的?

回答

0

迭代第一個目錄中的文件。對於其中的每個文件,檢查它是否存在於其他目錄中。如果存在,則將這兩個文件移動到另一個目錄。

0
for F in f1/* 
do 
    test -f $F && test -f f2/${F#*/} && echo cp $F f3/ 
done 

在這種情況下了解參數擴展是一個好主意。以上,構造${F#*/}相當於$(basename $F),但速度要快得多,因爲它對每次迭代都不執行基本名稱(1)。

如果你有大量的文件,而你並不真的需要測試文件是否定期文件,則可能避免環路,通過生成一個腳本加快速度。類似於:

mkfifo .f1 .f2 
(cd f1 && ls > ../.f1)& (cd f2 && ls > ../.f2)& 
comm -12 .f1 .f2 | sed 's:^.*$:cp f1/& f3/:' | sh 
rm .f1 .f2 

爲了說明的緣故,我假定文件名不包含空格或其他奇怪的字符。如果他們這樣做,當然參數將需要引用。