10

Я перехожу на Linux, и последнее препятствие - выйти из OneNote. Я хотел бы экспортировать все свои записные книжки, чтобы каждая страница шла в отдельный файл уценки.

Я перепробовал много вещей - в этой теме было несколько предложений, но все они устарели.

Если бы я мог заставить OneNote экспортировать все страницы как отдельные файлы .docx, было бы легко использовать pandoc для преобразования их в отдельные файлы уценки. Но OneNote будет экспортировать только несколько страниц в виде одного файла. Таким образом, одним из способов было бы найти способ автоматизировать экспорт каждой отдельной страницы в отдельности.

Другой вариант - экспортировать целые записные книжки за раз в виде файлов .docx, преобразовывать их в уценку с помощью pandoc, а затем разбивать файлы, но мне не хватает мастера регулярных выражений, чтобы csplit мог правильно вырезать файлы только с его базовыми регулярные выражения, и недостаточно мастера awk, чтобы заставить его выводить файлы с правильным и полным регулярным выражением.

Кто-нибудь может мне с этим помочь?

1 ответ1

8

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

рабочий процесс:

  1. Отключите сеть (-ы), чтобы OneNote не выполнял длительную синхронизацию OneDrive после каждого экспорта.

  2. В списке "Блокноты" разверните блокнот, чтобы увидеть все вкладки.

  3. Щелкните правой кнопкой мыши вкладку и нажмите «Экспорт ...».

  4. Щелкните раскрывающийся список типов файлов и нажмите M, чтобы выбрать формат .docx . Нажмите Enter, чтобы выбрать его.

  5. Нажмите Enter еще раз, чтобы сохранить экспортированный файл.

  6. Повторите шаги 2-5 для каждой вкладки в блокноте.

  7. Настройте pandoc и откройте окно PowerShell или cmd.

  8. Перейдите в каталог, в котором находятся экспортированные файлы .docx .

  9. Для каждого экспортированного файла .docx используйте следующую команду pandoc, чтобы преобразовать его в уценку (замените journal именем вашего файла):

    pandoc --extract-media='' --wrap=preserve '.\journal.docx' -o journal.md
    

    Вот объяснение команды: --extract-media='' указывает pandoc извлечь изображения из файла .docx и поместить их в подпапку по умолчанию (по умолчанию называемая 'media'). --wrap=preserve говорит pandoc не заключать в файл вывода разрывы строк (по умолчанию). Следующее поле - это имя входного файла, а -o означает "выход", поэтому journal.md - это имя выходного файла.

    Если вы не хотите разбивать этот файл (например, если ваша вкладка содержала только одну страницу), перейдите к шагу 15.

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

  10. Создайте новую папку для хранения страниц на вкладке. Для этого примера прямо сейчас все страницы из нашей вкладки "Журнал" в OneNote объединяются в journal.md . Создайте папку с именем journal которой будут храниться последние разделенные страницы в виде отдельных файлов .md.

  11. Если в файле .docx были какие-либо изображения, они будут экспортированы в новую папку с именем media . Перетащите мультимедийную папку, если она существует, в папку, которую вы только что создали. (Вот почему нам нужно выполнять каждую операцию pandoc отдельно, потому что каждый экспорт создаст отдельную папку мультимедиа, и мы хотим сохранить их отдельно, чтобы ссылки в файлах уценки работали правильно. Мы могли бы написать умный сценарий, чтобы сделать все это автоматически, но это займет меньше времени, просто сделав это вручную, если у вас нет большого количества записных книжек.) (Примечание. Вы можете сохранить шаг, указав нужное имя папки в одинарных кавычках --extract-media='' - для файлов .docx с изображениями папка будет создана автоматически для вас.)

  12. Откройте терминал bash и перейдите в каталог, содержащий файл .md . Папка, созданная на шаге 10, должна быть подпапкой этой (если вы не исправите путь в следующей команде).

  13. Если вы этого еще не сделали, щелкните значок окна Windows Bash, нажмите "Свойства", выберите "Режим QuickEdit", затем нажмите "ОК". Теперь снова щелкните значок окна Windows Bash, на этот раз нажмите "По умолчанию", выберите "Режим QuickEdit", а затем нажмите "ОК" (чтобы новые окна Bash, которые вы создадите в будущем, запомнили этот параметр). Теперь вы можете выбрать текст в терминале и нажать Ctrl+C, чтобы скопировать, или щелкнуть правой кнопкой мыши в окне терминала, чтобы вставить текст в буфер обмена. Теперь мы можем подготовить нашу команду в отдельном месте и быстро вставить каждую версию в Bash.

  14. Настройте следующую команду и запустите ее для каждого файла .md который вы хотите разбить на отдельные страницы:

    csplit ./journal.md --keep-files --prefix='journal/journalentry ' --suffix-format='%i.md' --elide-empty-files '/^\(Monday\|Tuesday\|Wednesday\|Thursday\|Friday\|Saturday\|Sunday\),/-2' '{*}'

    (Введите его одной строкой.)

    Как вы можете видеть, journal.md - это имя нашего файла уценки (в текущем каталоге, обозначенного ./), второе вхождение journal (после --prefix=') - это имя нашей подпапки, которая будет содержать разделение файлов и journalentry - это то, что будет называться каждый файл (с последующим номером индекса).

    Если вы хотите понять команду, вот объяснение: --keep-files прежнему печатает файлы, когда встречаются ошибки или конец файла, гарантируя, что последняя страница будет выводиться правильно (так как она не заканчивается шаблоном наше регулярное выражение). --prefix устанавливает схему именования выходных файлов. --suffix-format позволяет нам установить наше расширение файла (в данном случае - .md), но мы должны включить %i для оператора sprintf, который выводит номер индекса файла. --elide-empty-files пропускает вывод пустых файлов, которые нас не волнуют. Наконец, регулярное выражение, начинающееся с '/ и заканчивающееся /-2' , определяет, когда разбивать файл: оно говорит: «Когда вы найдете (/) в начале строки (^) следующий (() понедельник» или (\|) вторник или среда или четверг или пятница, или суббота, или воскресенье ()), за которыми следует запятая, отступите на две строки (-2) "и разделите файл, выводя то, что мы имеем до сих пор. Последний бит '{*}' повторяет предыдущую команду бесконечно, пока не будет достигнут конец файла.

  15. Перетащите файлы .docx и .md в папку, скажем, созданную вами папку, которая называется intermediates . Или вы можете просто удалить их. Приятно сохранить их на некоторое время, пока вы не освоитесь с вашим новым форматом файла, на случай, если вы захотите вернуться и сослаться на что-то, что произошло в процессе конвертации. Перемещение их в папку промежуточных файлов теперь может лишить вас возможности забыть, где мы находимся, и повторить шаги.

  16. Повторите шаги 9–14 для каждого файла .docx который вы экспортировали из OneNote.

  17. Теперь у вас есть одна папка для каждой вкладки, с кучей отдельных файлов .md , по одной для каждой страницы! Плюс media папка в каждой подпапке с изображениями на вкладке OneNote.

  18. Я рекомендую экспортировать каждую из ваших записных книжек OneNote в виде файла .mht (веб-страница с одним файлом) или, если хотите, в .pdf . Таким образом, если в некоторых файлах уценки было потеряно форматирование или другая информация, из-за многократного преобразования вы всегда можете вернуться назад и легко увидеть, как это должно было выглядеть в файле .mht . Кроме того, я бы порекомендовал экспортировать каждую из ваших записных книжек OneNote в виде файла .onepkg (пакет OneNote), поэтому у вас есть хорошая конечная экспортная копия, если вы когда-нибудь захотите снова открыть Блокнот в OneNote в его исходном / оригинальном формате (это может будет полезно, например, если в файле .mht отсутствует оригинальное форматирование, которое вы хотите восстановить).

  19. Завершая работу над каждой записной книжкой, щелкните правой кнопкой мыши записную книжку в OneNote и выберите "Закрыть эту записную книжку", чтобы вам не пришлось случайно редактировать записную книжку и выполнять повторный экспорт новых изменений. Для папок уценки я также создал папку для каждой записной книжки и поместил в нее все папки с вкладками.

  20. Закончив весь экспортный проект, вы можете перейти к своему OneDrive и удалить все оригиналы записных книжек OneNote, которые были там синхронизированы (конечно, убедитесь, что вы сейчас создаете резервные копии своих файлов! Существует OneDrive для Linux, или вы можете попробовать что-то вроде Syncthing).

  21. Наконец, мы можем переименовать все наши файлы .md в заголовок их страницы OneNote, который является первой строкой в каждом файле, используя два сценария. Сделайте следующие файлы:

    Файл 1: ~/scripts/rename-files-to-first-line.sh

    for i in *md ; do mv -n "$i" "$(cat "$i"|head -n1|tr -d '\000-\037[]{}()/\?*')".md; done
    

    Файл 2: ~/scripts/recurse.sh

    CDIR=$(pwd)
    for i in $(ls -R | grep :); do
        DIR=${i%:}                    # Strip ':'
        cd $DIR
        $1                            # Your command
        cd $CDIR
    done
    

    Затем перейдите в папку "Заметки" и запустите команду recurse.sh используя в качестве аргумента команду rename-files-to-first-line.sh :

    $ ~/scripts/recurse.sh ~/scripts/rename-files-to-first-line.sh
    

    Вы увидите, что скрипт рекурсивно просматривает все ваши файлы, выдавая некоторые ошибки в файлах со странными первыми строками (которые не преобразуются в имя файла) и в других крайних случаях. Однако команда mv в rename-files-to-first-line выполняется с аргументом -n , который предотвращает перезапись любых файлов. Там может быть несколько заметок, которые не будут переименованы, потому что первая строка в них пуста или что-то еще странное, но вы можете просто исправить эти несколько файлов вручную.

  22. Погрейтесь в своем чистом спасении от OneNote.

Предостережения:

  • Это не захватывает подстраницы - вам придется воссоздавать те с подпапками, если хотите.

  • Я не знаю, насколько хорошо это происходит с таблицами - уценка в любом случае немного неудобна для таблиц.

  • Вероятно, существуют другие виды форматирования, такие как шрифты, которые теряются или портятся при экспорте. Но для форматированного текста и изображений это работает довольно хорошо!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .