Объединение двух файлов в разных папках в Linux

У меня есть два набора папок, которые содержат файлы с те же имена файлов и структура. Структура папок выглядит примерно так:

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

поэтому мне нужно объединить (добавить) все файлы с одинаковым именем в этих папках (file1.txt с file1.txt etc.) в другой файл внутри папки output. После получения этих комбинированных файлов мне также нужно создать tar.GZ файл из всех этих комбинированных файлов.

Как я могу это сделать в среде командной строки на базе Linux? Имя папки (folder1 и folder2 и т. д.) является переменным, поэтому это должно быть дано, но файлы не должны и должны автоматически объединять все файлы с тем же именем.

кроме того, эти файлы имеют заголовки для имен столбцов, поэтому мне нужно будет удалить это, а также при добавлении.

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

Edit: добавлена часть, удаляющая Заголовок 2-го файла.


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

он будет работать, если у вас есть более 2 папок для задания конкатенации.

Я предполагаю, что вы хотите сохранить заголовок в результирующий файл.


вы пробовали команду cat (конкатенация)?

cat file1 file2 >> outputfile

возможно, вы захотите поместить это в небольшой скрипт bash, чтобы пройти через каталог. Это должно тебя завести.

удачи. Лео!--2-->