Объединение двух файлов в разных папках в 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-го файла.
Это будет работать, даже если есть некоторые файлы только в 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-->