С помощью Seahorse можно редактировать / удалять пароли для общих сетевых ресурсов.
Введите seahorse в тире. Выберите вкладку Пароли, нажмите стрелку вправо после значка папки, чтобы вывести список паролей. Выберите свой ресурс и щелкните правой кнопкой мыши -> Удалить.При следующей попытке монтирования вам потребуется указать новый пароль.
Есть несколько отличных подсказок о том, как это можно сделать в спецификации RTF.
Вот мой анализ проблемы.
Выполнение этого с использованием CLI, как вы предполагаете, будет самым простым, поскольку я не видел приложений на основе графического интерфейса, которые могут обрабатывать этот вроде пакетного преобразования. Похоже, вы можете просто изменить заголовок:
Заголовок имеет следующий синтаксис:<header>
\rtf <charset> \deff? <fonttbl> <filetbl>? <colortbl>? <stylesheet>? <listtables>? <revtbl>?
Each of the various header tables should appear, if they exist, in the above order. Document properties can occur before and between the header tables. A property must be defined before being referenced. Specifically:
* The style sheet must occur before any style usage.
* The font table must precede any reference to a font.
* The \deff keyword must precede any text without an explicit reference to a font, because it specifies the font to use in such cases.
Лично, после просмотра этой информации мне приходит в голову, что все, что вы пытаетесь (d1)
Существуют инструменты, которые помогут вам в этом процессе, который я опишу ниже, поскольку я не знаю, как это сделать, t есть пример стиля документа, который у вас есть, и стиль документа, который вы хотите, и более общий ответ, скорее всего, будет более полезен для сообщества, чем тот, который нацелен на вашу точную ситуацию.
grep будет полезно проанализировать существующие файлы, которые нужно преобразовать, и образец целевого стиля для существующих <fonttbl> и <stylesheet> вариантов. Определив, что у вас есть на самом деле, вы должны иметь возможность написать простой скрипт, используя sed, чтобы заменить существующий контент заголовка на нужное содержимое заголовка. Существует множество примеров того, как выполнять итерацию через файлы в сценарии bash (пример) и как свободно использовать sed (пример), если вы не знакомы с этими понятиями.
Есть также одна строка для замены строка в файле. Некоторые могут работать лучше, чем другие, в зависимости от вашего варианта использования. В зависимости от содержимого ваших файлов может быть или нет смысла просто заменять каждый экземпляр fs36 на fs44. В какой оболочке вы используете, может также повлиять на то, как лучше всего писать ваши выражения. В зависимости от сложности и содержания ваших документов вам может быть лучше использовать sed, perl или grep или, возможно, даже их комбинацию. Поскольку это стало вопросом программирования, лучше всего отнести вас к примеру , где вы легко найдете полдюжины разных подходов, один из которых вполне подходит вашим потребностям.
Например, если вы хотите применить эти изменения в системной области,
find /path/to/files -type f -exec sed -i 's/oldstring/newstring/g' {} \;, как указано в rezizter, скорее всего, лучший.
Если вы хотите скомпоновать свои изменения в Единственный каталог,
grep -rl matchstring somedir/ | xargs sed -i 's/fs36/fs44/g', предоставленный rezizter , является отличным выбором.
Чтобы быть в безопасности, вы должны предварительно обработать файлы, чтобы гарантировать, что любые изменения, которые вы можете сделать, не будут иметь непреднамеренных последствий. Например:
<!-- language: lang-bash -->
#!/bin/bash
for f in *.rtf
do
echo $f
grep fs36
done
Вышеуказанные строки будут отображать строки, содержащие строку поиска fs36 для каждого файла .rtf в каталоге.
У меня нет примера от стиля документа, который у вас есть, и стиля документа, который вы хотите
. Последнюю спецификацию можно получить здесь. Я не вижу никаких изменений, которые должны повлиять на этот подход.
Когда все, что у вас есть, это инструменты командной строки, все выглядит как проблема с командной строкой. Я решил написать этот ответ, используя макросы LibreOffice:
Используйте цикл командной строки для обработки каждого документа Writer в «безголовой» среде. Запустите макрос, чтобы изменить файл документа Writer .rtf (Rich Text Format). Макрос сохраняет файл и возвращает Loop обратно в 1.Создать два или более файлов, содержащих:
Создать скрипт ~/Downloads/copy-rtf.sh, содержащий:
cp ~/Documents/*.rtf ~/Downloads
Отметить как исполняемый файл с помощью
chmod a+x ~/Downloads/copy-rtf.sh
Во время разработки и тестирования будут изменены файлы, изменяющие макрос *.rtf в каталоге ~/Downloads. Перед каждым типом теста cd ~/Downloads и запустите ./copy-rtf.sh. После того, как вывод прекрасен, они копируются обратно в живую директорию. Каталог «Загрузки» используется, потому что:
Во время разработки и тестирования файлы, изменяющие макросы *.rtf, будут выполняться с ~/Downloads. он периодически добавляется и периодически очищается вручную Перед каждым типом теста cd ~/Downloads и запустите ./copy-rtf.shИспользуя этот , вызовите Libreoffice Writer из командной строки и передайте ему глобальное имя макроса для выполнения:
soffice -headless -invisible "vnd.sun.star.script:Standard.Module1.MySubroutine? language=Basic&location=application"
Вышеуказанный ответ может не работать поэтому можно попробовать другой метод:
soffice "macro:///Standard.SaveCSV.Main" $1
Для запуска макросов вам требуется Java Runtime Environment (JRE). Веб-страница разработчика имеет другой метод для загрузки и установки вручную.
Однако этот AU Q & amp; A: https://askubuntu.com/a/728153/307523 предполагает, что это так же просто:
sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer oracle-java8-set-default
Я попробовал метод AU Q & amp; A и после первого шага добавления PPA появляется заставка с дополнительной информацией. Наиболее полезной является ссылка на https://askubuntu.com/a/728153/307523 .
Третий шаг установки JRE 8 требует, чтобы вы использовали Tab и Enter для принять Лицензионное соглашение.
Теперь откройте LibreOffice и выберите Tools -> Options -> LibreOffice -> Advanced и настройте этот экран:
[!d12]
Щёлкните по параметрам:
, который добавляется регулярно и вручную опустошается Oracle Corporation 1.8.0_161 ] После того, как вывод прекрасен, они будут скопированы обратно в живую директорию. Нажмите «ОК». Вам будет предложено перезагрузить компьютер, нажмите «Перезагрузить сейчас».Макрос будет считывать весь документ и:
Oracle Corporation 1.8.0_161 [ ! d52] Если заголовок 1 задает размер шрифта до 28 Нажмите OK , а затем установите размер шрифта до 12Макрос сохранит документ и выйдет из Libreoffice Writer.
Сделайте сохранение файла, и появится диалоговое окно:
Включите это сообщение выключено, как показано на экране.
Я потратил несколько дней на попытку записи макроса с помощью «Инструменты» -> «Макросы» -> «Макросы» - Record Macro "->" Basic ". Сначала это казалось многообещающим, но записанный макрос имел непоследовательное поведение и должен был быть оставлен для рукописного основного макроса. Найденная помощь в Stack Overflow для эксперта там, чтобы помочь мне с базовой базовой кодировкой. Вот результат:
Sub ChangeAllFonts
rem - Change all font names to Ubuntu.
rem - If heading 1 set font size to 28
rem - else if font size is 18 set to 22
rem - else set font size to 12
rem - The macro will save document and exit LibreOffice Writer.
Dim oDoc As Object
Dim oParEnum As Object, oPar As Object, oSecEnum As Object, oSec As Object
Dim oFamilies As Object, oParaStyles As Object, oStyle As Object
oDoc = ThisComponent
oParEnum = oDoc.Text.createEnumeration()
Do While oParEnum.hasMoreElements()
oPar = oParEnum.nextElement()
If oPar.supportsService("com.sun.star.text.Paragraph") Then
oSecEnum = oPar.createEnumeration()
Do While oSecEnum.hasMoreElements()
oSec = oSecEnum.nextElement()
If oSec.TextPortionType = "Text" Then
If oSec.ParaStyleName = "Heading 1" Then
rem ignore for now
ElseIf oSec.CharHeight = 18 Then
oSec.CharHeight = 22.0
Else
oSec.CharHeight = 12.0
End If
End If
Loop
End If
Loop
oFamilies = oDoc.getStyleFamilies()
oParaStyles = oFamilies.getByName("ParagraphStyles")
oStyle = oParaStyles.getByName("Heading 1")
oStyle.setPropertyValue("CharHeight", 28.0)
FileSave
StarDesktop.terminate()
End Sub
rem Above subroutine is missing call to UbuntuFontName ()
rem also it is calling oStyle.setPropertyValue("CharHeight", 28.0)
rem which may cause problems. Will test. Also StarDesktop.terminate ()
rem is known to cause problems and will likely be reworked with a
rem a dialog box telling operator the program is finished and maybe
rem to press <Alt>+<F4>.
rem ========= Original code below for possible recycling ===========
Sub AllFonts
rem - change all font names to Ubuntu.
rem - If heading 1 set font size to 28
rem - else if font size is 18 set to 22
rem - else set font size to 12
rem The macro will save document and exit Libreoffice Writer.
Dim CharHeight As Long, oSel as Object, oTC as Object
Dim CharStyleName As String
Dim oParEnum as Object, oPar as Object, oSecEnum as Object, oSec as Object
Dim oVC as Object, oText As Object
Dim oParSection 'Current Section
oText = ThisComponent.Text
oSel = ThisComponent.CurrentSelection.getByIndex(0) 'get the current selection
oTC = oText.createTextCursorByRange(oSel) ' and span it with a cursor
rem Scan the cursor range for chunks of given text size.
rem (Doesn't work - affects the whole document)
oParEnum = oTC.Text.createEnumeration()
Do While oParEnum.hasMoreElements()
oPar = oParEnum.nextElement()
If oPar.supportsService("com.sun.star.text.Paragraph") Then
oSecEnum = oPar.createEnumeration()
oParSection = oSecEnum.nextElement()
Do While oSecEnum.hasMoreElements()
oSec = oSecEnum.nextElement()
If oSec.TextPortionType = "Text" Then
CharStyleName = oParSection.CharStyleName
CharHeight = oSec.CharHeight
if CharStyleName = "Heading 1" Then
oSec.CharHeight = 28
elseif CharHeight = 18 Then
oSec.CharHeight = 22
else
oSec.CharHeight = 12
End If
End If
Loop
End If
Loop
FileSave
stardesktop.terminate()
End Sub
Sub UbuntuFontName
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------- Select all text ------------------------------------------
dispatcher.executeDispatch(document, ".uno:SelectAll", "", 0, Array())
rem ----------- Change all fonts to Ubuntu -------------------------------
dim args5(4) as new com.sun.star.beans.PropertyValue
args5(0).Name = "CharFontName.StyleName"
args5(0).Value = ""
args5(1).Name = "CharFontName.Pitch"
args5(1).Value = 2
args5(2).Name = "CharFontName.CharSet"
args5(2).Value = -1
args5(3).Name = "CharFontName.Family"
args5(3).Value = 0
args5(4).Name = "CharFontName.FamilyName"
args5(4).Value = "Ubuntu"
dispatcher.executeDispatch(document, ".uno:CharFontName", "", 0, args5())
end sub
sub FileSave
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
end sub
Есть несколько отличных подсказок о том, как это можно сделать в спецификации RTF.
Вот мой анализ проблемы.
Выполнение этого с использованием CLI, как вы предполагаете, будет самым простым, поскольку я не видел приложений на основе графического интерфейса, которые могут обрабатывать этот вроде пакетного преобразования. Похоже, вы можете просто изменить заголовок:
Заголовок имеет следующий синтаксис:<header>
\rtf <charset> \deff? <fonttbl> <filetbl>? <colortbl>? <stylesheet>? <listtables>? <revtbl>?
Each of the various header tables should appear, if they exist, in the above order. Document properties can occur before and between the header tables. A property must be defined before being referenced. Specifically:
* The style sheet must occur before any style usage.
* The font table must precede any reference to a font.
* The \deff keyword must precede any text without an explicit reference to a font, because it specifies the font to use in such cases.
Лично, после просмотра этой информации мне приходит в голову, что все, что вы пытаетесь (d1)
Существуют инструменты, которые помогут вам в этом процессе, который я опишу ниже, поскольку я не знаю, как это сделать, t есть пример стиля документа, который у вас есть, и стиль документа, который вы хотите, и более общий ответ, скорее всего, будет более полезен для сообщества, чем тот, который нацелен на вашу точную ситуацию.
grep будет полезно проанализировать существующие файлы, которые нужно преобразовать, и образец целевого стиля для существующих <fonttbl> и <stylesheet> вариантов. Определив, что у вас есть на самом деле, вы должны иметь возможность написать простой скрипт, используя sed, чтобы заменить существующий контент заголовка на нужное содержимое заголовка. Существует множество примеров того, как выполнять итерацию через файлы в сценарии bash (пример) и как свободно использовать sed (пример), если вы не знакомы с этими понятиями.
Есть также одна строка для замены строка в файле. Некоторые могут работать лучше, чем другие, в зависимости от вашего варианта использования. В зависимости от содержимого ваших файлов может быть или нет смысла просто заменять каждый экземпляр fs36 на fs44. В какой оболочке вы используете, может также повлиять на то, как лучше всего писать ваши выражения. В зависимости от сложности и содержания ваших документов вам может быть лучше использовать sed, perl или grep или, возможно, даже их комбинацию. Поскольку это стало вопросом программирования, лучше всего отнести вас к примеру , где вы легко найдете полдюжины разных подходов, один из которых вполне подходит вашим потребностям.
Например, если вы хотите применить эти изменения в системной области,
find /path/to/files -type f -exec sed -i 's/oldstring/newstring/g' {} \;, как указано в rezizter, скорее всего, лучший.
Если вы хотите скомпоновать свои изменения в Единственный каталог,
grep -rl matchstring somedir/ | xargs sed -i 's/fs36/fs44/g', предоставленный rezizter , является отличным выбором.
Чтобы быть в безопасности, вы должны предварительно обработать файлы, чтобы гарантировать, что любые изменения, которые вы можете сделать, не будут иметь непреднамеренных последствий. Например:
<!-- language: lang-bash -->
#!/bin/bash
for f in *.rtf
do
echo $f
grep fs36
done
Вышеуказанные строки будут отображать строки, содержащие строку поиска fs36 для каждого файла .rtf в каталоге.
У меня нет примера от стиля документа, который у вас есть, и стиля документа, который вы хотите
. Последнюю спецификацию можно получить здесь. Я не вижу никаких изменений, которые должны повлиять на этот подход.
Когда все, что у вас есть, это инструменты командной строки, все выглядит как проблема с командной строкой. Я решил написать этот ответ, используя макросы LibreOffice:
Используйте цикл командной строки для обработки каждого документа Writer в «безголовой» среде. Запустите макрос, чтобы изменить файл документа Writer .rtf (Rich Text Format). Макрос сохраняет файл и возвращает Loop обратно в 1.Создать два или более файлов, содержащих:
Создать скрипт ~/Downloads/copy-rtf.sh, содержащий:
cp ~/Documents/*.rtf ~/Downloads
Отметить как исполняемый файл с помощью
chmod a+x ~/Downloads/copy-rtf.sh
Во время разработки и тестирования будут изменены файлы, изменяющие макрос *.rtf в каталоге ~/Downloads. Перед каждым типом теста cd ~/Downloads и запустите ./copy-rtf.sh. После того, как вывод прекрасен, они копируются обратно в живую директорию. Каталог «Загрузки» используется, потому что:
Во время разработки и тестирования файлы, изменяющие макросы *.rtf, будут выполняться с ~/Downloads. он периодически добавляется и периодически очищается вручную Перед каждым типом теста cd ~/Downloads и запустите ./copy-rtf.shИспользуя этот , вызовите Libreoffice Writer из командной строки и передайте ему глобальное имя макроса для выполнения:
soffice -headless -invisible "vnd.sun.star.script:Standard.Module1.MySubroutine? language=Basic&location=application"
Вышеуказанный ответ может не работать поэтому можно попробовать другой метод:
soffice "macro:///Standard.SaveCSV.Main" $1
Для запуска макросов вам требуется Java Runtime Environment (JRE). Веб-страница разработчика имеет другой метод для загрузки и установки вручную.
Однако этот AU Q & amp; A: https://askubuntu.com/a/728153/307523 предполагает, что это так же просто:
sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer oracle-java8-set-default
Я попробовал метод AU Q & amp; A и после первого шага добавления PPA появляется заставка с дополнительной информацией. Наиболее полезной является ссылка на https://askubuntu.com/a/728153/307523 .
Третий шаг установки JRE 8 требует, чтобы вы использовали Tab и Enter для принять Лицензионное соглашение.
Теперь откройте LibreOffice и выберите Tools -> Options -> LibreOffice -> Advanced и настройте этот экран:
[!d12]
Щёлкните по параметрам:
, который добавляется регулярно и вручную опустошается Oracle Corporation 1.8.0_161 ] После того, как вывод прекрасен, они будут скопированы обратно в живую директорию. Нажмите «ОК». Вам будет предложено перезагрузить компьютер, нажмите «Перезагрузить сейчас».Макрос будет считывать весь документ и:
Oracle Corporation 1.8.0_161 [ ! d52] Если заголовок 1 задает размер шрифта до 28 Нажмите OK , а затем установите размер шрифта до 12Макрос сохранит документ и выйдет из Libreoffice Writer.
Сделайте сохранение файла, и появится диалоговое окно:
Включите это сообщение выключено, как показано на экране.
Я потратил несколько дней на попытку записи макроса с помощью «Инструменты» -> «Макросы» -> «Макросы» - Record Macro "->" Basic ". Сначала это казалось многообещающим, но записанный макрос имел непоследовательное поведение и должен был быть оставлен для рукописного основного макроса. Найденная помощь в Stack Overflow для эксперта там, чтобы помочь мне с базовой базовой кодировкой. Вот результат:
Sub ChangeAllFonts
rem - Change all font names to Ubuntu.
rem - If heading 1 set font size to 28
rem - else if font size is 18 set to 22
rem - else set font size to 12
rem - The macro will save document and exit LibreOffice Writer.
Dim oDoc As Object
Dim oParEnum As Object, oPar As Object, oSecEnum As Object, oSec As Object
Dim oFamilies As Object, oParaStyles As Object, oStyle As Object
oDoc = ThisComponent
oParEnum = oDoc.Text.createEnumeration()
Do While oParEnum.hasMoreElements()
oPar = oParEnum.nextElement()
If oPar.supportsService("com.sun.star.text.Paragraph") Then
oSecEnum = oPar.createEnumeration()
Do While oSecEnum.hasMoreElements()
oSec = oSecEnum.nextElement()
If oSec.TextPortionType = "Text" Then
If oSec.ParaStyleName = "Heading 1" Then
rem ignore for now
ElseIf oSec.CharHeight = 18 Then
oSec.CharHeight = 22.0
Else
oSec.CharHeight = 12.0
End If
End If
Loop
End If
Loop
oFamilies = oDoc.getStyleFamilies()
oParaStyles = oFamilies.getByName("ParagraphStyles")
oStyle = oParaStyles.getByName("Heading 1")
oStyle.setPropertyValue("CharHeight", 28.0)
FileSave
StarDesktop.terminate()
End Sub
rem Above subroutine is missing call to UbuntuFontName ()
rem also it is calling oStyle.setPropertyValue("CharHeight", 28.0)
rem which may cause problems. Will test. Also StarDesktop.terminate ()
rem is known to cause problems and will likely be reworked with a
rem a dialog box telling operator the program is finished and maybe
rem to press <Alt>+<F4>.
rem ========= Original code below for possible recycling ===========
Sub AllFonts
rem - change all font names to Ubuntu.
rem - If heading 1 set font size to 28
rem - else if font size is 18 set to 22
rem - else set font size to 12
rem The macro will save document and exit Libreoffice Writer.
Dim CharHeight As Long, oSel as Object, oTC as Object
Dim CharStyleName As String
Dim oParEnum as Object, oPar as Object, oSecEnum as Object, oSec as Object
Dim oVC as Object, oText As Object
Dim oParSection 'Current Section
oText = ThisComponent.Text
oSel = ThisComponent.CurrentSelection.getByIndex(0) 'get the current selection
oTC = oText.createTextCursorByRange(oSel) ' and span it with a cursor
rem Scan the cursor range for chunks of given text size.
rem (Doesn't work - affects the whole document)
oParEnum = oTC.Text.createEnumeration()
Do While oParEnum.hasMoreElements()
oPar = oParEnum.nextElement()
If oPar.supportsService("com.sun.star.text.Paragraph") Then
oSecEnum = oPar.createEnumeration()
oParSection = oSecEnum.nextElement()
Do While oSecEnum.hasMoreElements()
oSec = oSecEnum.nextElement()
If oSec.TextPortionType = "Text" Then
CharStyleName = oParSection.CharStyleName
CharHeight = oSec.CharHeight
if CharStyleName = "Heading 1" Then
oSec.CharHeight = 28
elseif CharHeight = 18 Then
oSec.CharHeight = 22
else
oSec.CharHeight = 12
End If
End If
Loop
End If
Loop
FileSave
stardesktop.terminate()
End Sub
Sub UbuntuFontName
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------- Select all text ------------------------------------------
dispatcher.executeDispatch(document, ".uno:SelectAll", "", 0, Array())
rem ----------- Change all fonts to Ubuntu -------------------------------
dim args5(4) as new com.sun.star.beans.PropertyValue
args5(0).Name = "CharFontName.StyleName"
args5(0).Value = ""
args5(1).Name = "CharFontName.Pitch"
args5(1).Value = 2
args5(2).Name = "CharFontName.CharSet"
args5(2).Value = -1
args5(3).Name = "CharFontName.Family"
args5(3).Value = 0
args5(4).Name = "CharFontName.FamilyName"
args5(4).Value = "Ubuntu"
dispatcher.executeDispatch(document, ".uno:CharFontName", "", 0, args5())
end sub
sub FileSave
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
end sub