我有两组包含相同文件名和结构的文件的文件夹。文件夹结构是这样的:
\outputfolder\
|---\folder1\
| |---file1.txt
| |---file2.txt
|
|---\folder2\
|---file1.txt
|---file2.txt
所以我需要做的是将这些文件夹中的所有文件(file1.txt与file1.txt等)组合(附加)到outputfolder中的另一个文件中。获取这些组合文件后,我还需要从所有这些组合文件中创建tar.gz文件。
如何在基于Linux的命令行环境中完成此操作?文件夹名称(folder1和folder2等)是可变的,因此需要给出但文件不需要,它应自动组合所有具有相同名称的文件。
此外,这些文件包含列名称的标题,因此我还需要在追加时删除它。
答案 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脚本中查看它来浏览目录。这应该让你开始。
祝你好运。 利奥