2011-06-23 69 views
5

我有兩組文件夾,其文件名與文件名相同,結構爲。該文件夾結構是這樣的:將兩個文件合併到Linux中的不同文件夾中

\outputfolder\ 
|---\folder1\ 
|  |---file1.txt 
|  |---file2.txt 
| 
|---\folder2\ 
     |---file1.txt 
     |---file2.txt 

所以我需要做的是(追加)的所有文件結合了這些文件夾同名(FILE1.TXT與FILE1.TXT等)到另一個輸出文件夾內的文件。得到這些組合文件後,我還需要從所有這些組合文件中創建一個tar.gz文件。

我該如何在基於Linux的命令行環境下完成此操作?文件夾名稱(folder1和folder2等)是可變的,所以需要給出這些文件,但文件不需要,它應該自動合併具有相同名稱的所有文件。

此外,這些文件具有列名稱標題,所以我需要刪除,以及追加。

+1

你是什麼意思「結合file1.txt與file1.txt」?追加一個到另一個?繞過哪條路? – Johnsyweb

+0

yah通過結合我的意思是追加 – sfactor

+0

我只看到你現在編輯列名稱。我已將代碼添加到我的答案中,這將刪除第二個文件中的標題。猜猜這就是你想要的... – mhyfritz

回答

4

下面是一些代碼,讓你開始

topdir=outputfolder 
dir1=folder1 
dir2=folder2 

for f in $topdir/$dir1/*.txt 
do 
    outf=$topdir/`basename $f .txt`-concat.txt 
    cp $f $outf 
    sed -e '1 d' $topdir/$dir2/`basename $f` >> $outf 
done 

tar czf foo.tar.gz $topdir/*-concat.txt 

編輯:添加部除去第二個文件的頭。

0

您是否嘗試過cat命令(連接)?

cat file1 file2 >> outputfile 

可能想要在一個小bash腳本中查看這個目錄來查看目錄。這應該讓你開始。

祝你好運。 利奧

1
find . -name 'file1.txt' | xargs cat >file1_concat.txt 
1

這將工作即使只在文件夾2只在文件夾1一些文件,有些文件:

concat_files() { 
    for dir in "[email protected]"; do 
    for file in "$dir"/*; do 
     this=$(basename "$file") 
     { [[ -f "$this" ]] && sed 1d "$file" || cat "$file"; } >> "$this" 
    done 
    done 
    tar zcvf allfiles.tar.gz * 
} 

concat_files folder1 folder2 

,如果你有你的工作串連超過2個文件夾,它將工作。

我假設你想在結果文件中保留標題。

相關問題