Объединить несколько файлов в каталоге с добавлением файла в начале и в конце

на CentOS7:

  1. определенно 'запустите systemctl list -unit|grep postgresql' первым и получите полное имя службы
  2. 'systemctl остановить postgresql -??.service'
  3. 'su -postgres -c "psql"'

  4. и вы должны получить подтверждение того, что postgres действительно остановился:

'psql :не удалось подключиться к серверу :Нет такого файла или каталога. Является сервер работает локально и принимает соединения через сокет домена Unix "/var/run/postgresql/.s.PGSQL.5432"?'

-1
01.09.2021, 14:05
3 ответа

Цикл по файлам тела, используйте catдля конкатенации файлов заголовка и нижнего колонтитула с каждым файлом тела, вывод с новым именем:

for body in file*.txt; do
    cat intro.txt "$body" outro.txt >"${body%.txt}-complete.txt"
done

Это записывает завершенные файлы с такими именами, как file1-complete.txt, file2-complete.txt. Имя выходного файла создается путем удаления известного суффикса имени файла .txtиз имени в $bodyи добавления -complete.txtв конце.

Обратите внимание, что любые уже существующие выходные файлы перезаписываются.

1
02.09.2021, 07:33

Я предполагаю, что имена ваших "мясных" файлов (, которые вы назвали им с file1.txtпо file3.txt), таковы, что они могут быть покрыты выражением glob, таким как file*.txt.

В этом случае должно работать следующее (Я предполагаю, что здесь строковые операции в стиле Bash -, но адаптация к другим оболочкам должна быть тривиальной):

for f in file*.txt; do
    out="${f/%.txt/_complete.txt}";
    cat intro.txt "$f" outro.txt > "$out";
done

Это зациклит все файлы, соответствующие выражению glob file*.txt, и создаст новое имя файла, сохраненное в переменной оболочки $out, заменив суффикс .txtна _complete.txt(, чтобы file1.txtстало file1_complete.txt). Затем catвступление, текущий входной файл и заключение в новый файл.

1
02.09.2021, 07:33
for file in /my/directory/of/files/*; do
    cat /mydir1/prologue.txt "$file" epilogue.txt >>my_file_list
done
0
02.09.2021, 13:21

Теги

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