我想比較兩個文件夾以查看裏面的文件是否相同。如果它是相同的,那麼我將這些文件移動到另一個文件夾中。例如:使用shell腳本比較兩個文件夾中的文件
f1 f2
------ --------
test1 test3
test2 test4
test1
這裏test1.txt
文件可在這兩個文件夾,所以我需要那個文件移動到另一個文件夾。
這是如何使用shell腳本完成的?
我想比較兩個文件夾以查看裏面的文件是否相同。如果它是相同的,那麼我將這些文件移動到另一個文件夾中。例如:使用shell腳本比較兩個文件夾中的文件
f1 f2
------ --------
test1 test3
test2 test4
test1
這裏test1.txt
文件可在這兩個文件夾,所以我需要那個文件移動到另一個文件夾。
這是如何使用shell腳本完成的?
迭代第一個目錄中的文件。對於其中的每個文件,檢查它是否存在於其他目錄中。如果存在,則將這兩個文件移動到另一個目錄。
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
爲了說明的緣故,我假定文件名不包含空格或其他奇怪的字符。如果他們這樣做,當然參數將需要引用。