2015-03-02 62 views
-1

我有2個目錄dir1和dir2,每個目錄包含8000多個文件。我想將dir 2中具有相同名稱的dir1中的文件解壓到一個目錄,並將dir2中具有相同名稱的文件解壓到另一個目錄中。2個目錄中的常見文件

+2

請澄清你的問題。 (1)dir1/fileA和dir2/fileA都存在,(2)你想將dir1/fileA移動到dir3/fileA,(3)你想移動dir2/fileA到dir4/fileA。這是你正在尋找什麼?如果是這樣,請在問題中說出來。如果不是,請詳細解釋您想要的內容。 – 2015-03-02 05:49:38

+0

另外,你嘗試了什麼?在StackOverflow上有很多類似於您的場景的變體或問題;見例如http://stackoverflow.com/questions/1644593/unix-compare-two-folders-which-has-many-files-inside-contents http://stackoverflow.com/questions/20014987/bash-script-that-c​​opies -the-differences-in-two-directories-to-a-third-directory,http://stackoverflow.com/questions/2019857/diff-files-present-in-two-different-directories等 – tripleee 2015-03-02 06:00:45

+0

Yep ..正是你所解釋的。這裏有一點需要注意 - 2個目錄中具有相同名稱的文件包含不同的內容。這就是爲什麼我想要將dir1中與dir2文件具有相同名稱的文件解壓縮到dir3以及將dir1文件與dir4具有相同名稱的類似dir2文件解壓縮到dir4。 – Bionerd 2015-03-02 06:13:57

回答

0

如果我理解正確,你正在尋找這樣的事情

#!/bin/bash 

dir1list=(/path/to/dir1/*) 
dir2list=(/path/to/dir2/*) 

mkdir /tmp/dirlist 

for((n=0; n<${#dir1list}; n++)); do 
    echo "${dir1list[n]##/*/}" >> /tmp/dirlist/dir1.list 
done 

for((n=0; n<${#dir2list}; n++)); do 
    echo "${dir2list[n]##/*/}" >> /tmp/dirlist/dir2.list 
done 

grep -Fx -f /tmp/dirlist/dir2.list /tmp/dirlist/dir1.list > /tmp/dirlist/difflist1.txt 

grep -Fx -f /tmp/dirlist/dir1.list /tmp/dirlist/dir2.list > /tmp/dirlist/difflist2.txt 

XIFS=$IFS 
IFS=$'\n' 
Difflist1=($(</tmp/dirlist/difflist1.txt)) 
Difflist2=($(</tmp/dirlist/difflist2.txt)) 
IFS=$XIFS 

for((n=0; n<${#Difflist1}; n++)); do 
    mv "/path/to/dir1/${Difflist1[n]}" /path/to/dir3 
done 

for((n=0; n<${#Difflist2}; n++)); do 
    mv "/path/to/dir2/${Difflist2[n]}" /path/to/dir4 
done 

有可能是一個更優雅的方式來做到這一點。我基於幾個月前必須編寫的更復雜的腳本,因此可能無法針對您的特定工作進行優化。

+0

謝謝..這對我來說已經足夠了..我可以修改它來解決我的問題:: – Bionerd 2015-03-02 10:11:46

+0

不客氣。你所需要做的就是改變/ path/to/dir,它應該按原樣工作。只需將其粘貼到文件中,修復dir路徑,chmod + x並運行即可。注意:我在我的計算機上測試了它,路徑名需要是全名(即〜/ dir在某些地方不起作用) – DonkoXI 2015-03-02 10:48:31

+0

另請參閱fdupes,儘管它無法將文件移動到多個目錄中。這對查找重複文件非常有用,並且可以選擇刪除第一個找到的重複文件。 – 2016-11-14 01:20:43

相關問題