Как скопировать все файлы в определенную папку, а затем объединить их в один файл?

Если в исходном файле нет пустых строк (двух последовательных новых строк ), вы можете преобразовать каждую из в две новые строки с помощью sed. Это создаст файл (или поток ), который имеет пустую строку в качестве разделителя каждой записи. Затем awk (с пустым RS )способен разделить каждую "пустую строку" файлового (потока )с разделителями на "записи".

Описание может показаться сложным, но посмотрите на код:

sed 's/␁/\n\n/g' file | awk -v RS='' -vf="./script" '{print|f;close(f)}'

Если вам действительно нужно преобразовать символ со значением байта 0x01, замените на \x01в команде sed.

1
21.09.2020, 05:56
3 ответа

Oneliner с использованиемfind:

find "$path" -iname '*.txt' -exec cp {} "$dest" \; -exec sh -c "cat {} >> $dest/$output" \;
0
18.03.2021, 23:03

Если я правильно понял, вы можете заменить

do
  cp $i $dest;
done

с

do
  cat $i>>${dest}/${output};
done

Добавляет результаты в выходной файл.

0
18.03.2021, 23:03

вопрос :текстовые файлы в $path, есть ли подкаталоги, в которые вы хотите спуститься, чтобы найти все текстовые файлы? Если нет, то findне нужен, достаточно for file in "$path"/*.txt.

На самом деле,вам не нужен цикл, если все файлы находятся в одном каталоге:

cp -t "$dest" "$path"/*.txt
cat "$path"/*.txt > "$dest/$output"

Обратите внимание, что переменная в фигурных скобках ${var}не совпадает с переменной в кавычках"$var"

0
18.03.2021, 23:03

Теги

Похожие вопросы