在Linux中合并不同文件夹中的两个文件

在Linux中合并不同文件夹中的两个文件,linux,bash,scripting,command-line,Linux,Bash,Scripting,Command Line,我有两组文件夹,其中的文件具有相同的文件名和结构。文件夹结构如下所示: \outputfolder\ |---\folder1\ | |---file1.txt | |---file2.txt | |---\folder2\ |---file1.txt |---file2.txt 因此,我需要做的是将这些文件夹中具有相同名称的所有文件(file1.txt和file1.txt等)合并(追加)到outputfolder中的另一个文件中。

我有两组文件夹,其中的文件具有相同的文件名和结构。文件夹结构如下所示:

\outputfolder\
 |---\folder1\
 |      |---file1.txt
 |      |---file2.txt
 |
 |---\folder2\
        |---file1.txt
        |---file2.txt
因此,我需要做的是将这些文件夹中具有相同名称的所有文件(file1.txt和file1.txt等)合并(追加)到outputfolder中的另一个文件中。在获得这些组合文件之后,我还需要从所有这些组合文件创建一个tar.gz文件

如何在基于Linux的命令行环境中实现这一点?文件夹名称(folder1和folder2等)是可变的,因此需要给出该名称,但文件不需要,它应该自动组合具有相同名称的所有文件


此外,这些文件有列名的标题,因此在追加时我也需要删除这些标题。

您是否尝试过cat命令(连接)

可能需要将其放入一个小bash脚本中以遍历目录。这应该让你开始

祝你好运。
Leo

这里有一些代码可以帮助您开始

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

编辑:添加了删除第二个文件头的部分。

即使只有folder1中的某些文件和folder2中的某些文件,此操作仍有效:

concat_files() {
  for dir in "$@"; 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
如果您有两个以上的文件夹用于连接作业,则它将起作用


我假设您希望在生成的文件中保留标题。

您说的“将[…]file1.txt与file1.txt组合”是什么意思?将一个附加到另一个?怎么办?我现在只看到你对列名的编辑。我在我的答案中添加了代码,将删除第二个文件中的标题。我猜这就是你想要的。。。
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
concat_files() {
  for dir in "$@"; 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