在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