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

时间:2011-06-23 11:43:27

标签: linux bash scripting command-line

我有两组包含相同文件名和结构的文件的文件夹。文件夹结构是这样的:

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

所以我需要做的是将这些文件夹中的所有文件(file1.txt与file1.txt等)组合(附加)到outputfolder中的另一个文件中。获取这些组合文件后,我还需要从所有这些组合文件中创建tar.gz文件。

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

此外,这些文件包含列名称的标题,因此我还需要在追加时删除它。

4 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

即使只有folder1中的某些文件和仅文件夹2中的某些文件,这也会有效:

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

如果您的连接作业有两个以上的文件夹,它将起作用。

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

答案 3 :(得分:0)

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

cat file1 file2 >> outputfile

可能想在一个小的bash脚本中查看它来浏览目录。这应该让你开始。

祝你好运。 利奥