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

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

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

所以我需要做的是将这些文件夹中具有相同名称的所有文件(file1.txt和file1.txt等)合并(追加)到输出文件夹内的另一个文件中。 得到这些组合文件后,我还需要从所有这些组合的文件中创build一个tar.gz文件。

我怎样才能在一个基于Linux的命令行环境中实现这一点? 文件夹名称(folder1和folder2等)是可变的,所以这需要给予,但文件不需要,它应该自动组合所有的文件具有相同的名称。

此外,这些文件有列标题的名称,所以我需要删除,以及追加。

这里有一些代码让你开始

 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 

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

 find . -name 'file1.txt' | xargs cat >file1_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 

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

我假设你想保留结果文件中的标题。

你尝试过的猫命令(串联)?

 cat file1 file2 >> outputfile 

可能想要在一个小的bash脚本中查看这个目录。 这应该启动你。

祝你好运。 狮子座