2011-06-23 8 views
5

のファイル名と同じ構造を持つファイルが2つあり、構造はです。フォルダ構造は次のようなものされていますLinuxの異なるフォルダにある2つのファイルを結合する

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

だから、私は何をする必要があるか、他にこれらのフォルダ(FILE1.TXTなどとFILE1.TXT)に同じ名前の(追加)すべてのファイルを組み合わせることですoutputfolderの中のファイル。これらの結合ファイルを取得した後、これらの結合ファイルすべてからtar.gzファイルを作成する必要があります。

これをLinuxベースのコマンドライン環境でどのように達成できますか?フォルダ名(folder1とfolder2など)は可変であるため、ファイルを指定する必要はなく、すべてのファイルを同じ名前で自動的に結合する必要があります。

また、これらのファイルには列名のヘッダーがあるため、追加する際にも削除する必要があります。

+1

「[...] file1.txtとfile1.txtを組み合わせる」とはどういう意味ですか?もう片方に追加しますか?どの方向に向いていますか? – Johnsyweb

+0

yahを組み合わせると、私は追加を意味する – sfactor

+0

私は現在、列名についてあなたの編集を見ただけです。私は2番目のファイルのヘッダーを削除する私の答えにコードを追加しました。それがあなたの望むものだと思います... – 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にのみfolder1の中にいくつかのファイルといくつかのファイルがある場合でも、これは動作します:

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つの以上のフォルダを持っている場合、それは動作します。

結果ファイルにヘッダーを残しておきたいとします。

関連する問題