об'єднайте декілька текстових файлів _ + файли_ файлів в один текстовий файл


2

Я хотів би поєднати кілька текстових файлів, але з заголовками (EDIT: назви файлів). В ідеалі щось подібне

* a filename 
contents of file
... 
* another filename 
contents of file 
... 

etc... 

Я перебуваю у Windows (не DOS), але маю доступ до powershell, pandoc, emacs, cygwin чи будь-чого іншого, що ви рекомендуєте. (Очевидно, що я новачок пробує орга-режим.)

Я можу їх легко помістити в одну папку. Але я хотів би уникати введення імені кожного файлу. Якщо рекомендується файл bat, я ніколи не використовував його, але хочу навчитися.


Можливий дублікат цього .
Раджиб

@Rajib, я не розумів, що це питання хоче, щоб заголовки перепліталися з комбінованим текстом.
Брейді Тренер

1
А тепер я бачу, ви маєте на увазі ім'я файлу. Вибачте, я неправильно зрозумів "Заголовок файлу".
Раджиб

ах, я редагую, щоб дотримуватися номенклатури, але залиште відповідний термін для пошукових термінів.
Тренер Брейді

Відповіді:


5

Я впевнений, що є щось більш розумне, але ось сценарій powerhell об'єднає всі файли:

$files = (dir *.txt)
$outfile = "out.txt"

$files | %{
    $_.FullName | Add-Content $outfile
    Get-Content $_.FullName | Add-Content $outfile
}

Це ефективно? Не страшно ... але це буде працювати в крайній мірі.


Це працює надзвичайно. Я просто перейшов до папки, клацнув правою кнопкою миші на кадр, щоб вставити ваш сценарій, і натиснув <RET>. Я можу знайти заміну для переключення C:\txt` to ** `.
Брейді Тренер

Щоб уточнити свій коментар до нащадків, я перейшов із програми PowerShell.
Брейді Тренер

1
@BradyTrainor, якщо ви хочете лише ім'я файлу, але не шлях, переключіть рядок, який $_.FullName | Add-Content $outfileпотрібно прочитати $_.Name | Add-Content $outfile.
Мітч

Дякую, Мітч. Щоб я міг продовжувати зупинятися на вивченні коду, як я можу додати такий рядок, як " ** "?
Брейді Тренер

2
Ви можете довільно відформатувати речі за допомогою -fоператора. Докладніше див. Blogs.technet.com/b/heyscriptingguy/archive/2013/03/12/… . Щоб заставити рядок імені файлу ** filename, ви б вказали("** {0}" -f $_.Name) | Add-Content $outfile
Мітч

1

Натхненний структурою сценарію Мітча, я написав версію для середовищ на базі Unix, таких як GNU / Linux та OS X:

find -regex '.*\.\(docx?\|org\|rtf\|te?xt\)$' | while read file
do
    echo "* $file" >> target-file.org
    cat "$file" | pandoc -t org >> target-file.org
done

(Якщо ви не хочете встановлювати pandoc, просто вийміть трубку та команду | pandoc -t org.)

Цей скрипт знайде всі файли в поточному каталозі та його підкаталогах, які мають розширення файлів, як описано ( .docxтощо).

Наприклад, якщо список включає fileA.textі fileB.rtfв підкаталозі subd/, targetfile.orgбудуть отримані рядки, такі як:

* ./subd/fileA.text
<fileA's contents converted to an org file by pandoc>
* ./subd/fileB.rtf
<fileB's contents converted to an org file by pandoc>

Я думаю, що це дозволить target-file.orgпокращити ситуацію в Emacs, без того, щоб сценарій був надто складним. (Особливо, якщо ви включите pandocкрок.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.