Как «отбросить» или «убрать» файл libreoffice с расширением .odp?

Есть ли способ cat или меньше a .odp файл, как у нас для файлов .odt , как упоминалось { {1}} здесь

2
задан 10 April 2021 в 19:31

1 ответ

Комментарий к вашему вопросу, отправленный Ринзвиндом , дал мне идею. Спасибо, мой друг. Я никогда не пробовал это раньше, но, если вы можете извлечь свои odt, вы можете использовать grep для содержимого odt вместо самого odt.

Таким образом, процедура будет примерно такой:

cd THE-FOLDER-CONTAINING-THE-ODT
mkdir ext
unzip THE-ODT-FILE -d ext
cd ext
grep KEYWORDS * -ri

Пример:

В этом примере я нахожусь в папке с именем «ray», в которой у меня есть документ с именем Practicas-ray-del-angel -gerardo -mbretada-2021.odt . Итак, я собираюсь использовать тот же процесс, просто изменив параметры, чтобы найти слово «RAYMUNDO».

cd ray
mkdir ext
unzip practicas-ray-del-angel-gerardo-membretada-2021.odt -d ext
cd ext
grep "raymundo" * -ri

Следующий снимок экрана даст вам изображение всего процесса.

enter image description here

Скрипты

Конечно, это будет серьезной проблемой, если вам придется запускать это в кучу документов, поэтому я бы поместил процесс, который будет запускаться с правильными параметрами в командной строке. Файл будет содержать следующее:

odtgrep.sh


if [[ -d "ext" ]]
then
  echo "ext exists. Will not be created but we will remove the contents on it."
  rm ext/* -rf
else
  echo "First time run? Let's create the ext directory."
fi
unzip $1 -d ext
cd ext
grep "$2" * -ri

Объяснение


Проверка каталога

Сначала мы проверим, существует ли каталог ext .

if [[ -d "ext" ]]
then
  echo "ext exists. Will not be created but we will remove the contents on it."
  rm ext/* -rf
else
  echo "First time run? Let's create the ext directory."
fi

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

Извлечение

Как только мы убедимся, что каталог ext готов к использованию, мы распакуем файл, используя первый параметр в командной строке, переданной сценарию.

unzip $1 -d ext

После чего мы войдем в каталог для работы с файлами через:

cd ext

Searching

Этот код будет искать нужные слова, указанные в командной строке со вторым параметром внутри каждого отдельного файла на ext каталог.

grep "$2" * -ri

Обратите внимание, что файл content.xml отвечает за сохранение текста, поэтому, возможно, вы захотите изменить код для этого:

grep "$2" content.xml -i

Выполнение

Сценарий должен запускаться с :

for i in *.odt; do bash odtgrep.sh "$i" "raymundo"; done;

Это будет:

  1. Создайте массив со всеми файлами odt в текущей папке
  2. Запустите сценарий для каждого файла в массиве
  3. Найдите слово «raymundo» внутри каждого отдельного файла и покажите результатов, если они найдены.

Соображения

  • Убедитесь, что вы используете правильные переменные и временную (внешнюю) папку , чтобы предотвратить повреждение ваших данных.
  • Убедитесь, что ваши кавычки работают, и избегайте использования пробелов, когда возможно.
  • При работе с кучей файлов вы увидите много данных на своем терминале, поэтому вы можете использовать параметр -l в grep в , чтобы показать меньше данных.
  • Имя файла, содержащего текст, найденный при поиске, будет представлен самим zip-файлом с текстом вида: Архив: Practicas-ray-del-angel-gerardo -mbretada-2021. odt

Сообщите нам, работает ли это для вас. Любые комментарии или предложения по улучшению этого кода приветствуются.

3
ответ дан 23 April 2021 в 23:24

Другие вопросы по тегам:

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