1) распаковка файла eml в папку с файлами
2) перенесение xlsx файлы из распакованную папку
3) удаление распакованной папки
В чистом виде через find я однострочником это не смогу написать, - сколь я ни пробовал, не получается у меня организовать последовательность действий над найденными файлами в одну строку. Однако в качестве обходного варианта могу предложить применение вспомогательного скрипта. Скрипт будет выполнять действия по описанному алгоритму: на вход даем имя файла (EML), и имя папки, куда содержимое складировать. Скрипт распаковывает содержимое EML в буферную папку, вытаскивает из буферной папки все файлы XLSX в нашу целевую папку, а буферную папку очищает.
Если на словах все устраивает - приступаем к реализации. Понадобится только определиться:
Допущение 1: используемый текстовый редактор: в штатной версии Ubuntu 16.04 - 18.04 текстовым редактором является gedit. Его я и буду применять далее по тексту. Если у Вас в системе используется другой - подставьте его имя (это может быть leafpad, kate, pluma, ... - в зависимости от DE в установленной у Вас системе).
Допущение 2. Местоположение файлов EML. Исхожу из Вашего ответа #36, и подставляю везде продемонстрированное там
/home/aik/snap/thunderbird/common/.thunderbird/ccv00u5b.default/Mail/pop.yandex.com/Inbox/cur/
Если это не верный путь - подставляйте то, что у Вас по факту (где лежат файлы EML) далее по тексту вместо этой строки.
Словом, поехали.
1. Открываем терминал (Ctrl+Alt+T), выполняем в нем команду:
gedit ~/unpackEML
Появляется окно текстового редактора без какого-либо текста в нем. Это наш пустой файл unpackEML, находящийся в домашней папке текущего пользователя. Вводим в это окно такой код:
#!/bin/bash
curEML="$1" #принимаем имя текущего файла EML из первого параметра для скрипта
outerDir="$2" #принимаем имя директории, куда сохранять файлы XLSX из второго параметра скрипта
bufDir="$HOME/buf"
#Проверяем факт существования конечной директории (создаем, если нет):
if [ ! -d "$outerDir" ]; then mkdir -p "$outerDir"; fi
#Проверяем факт существования буферной директории (создаем, если нет):
if [ ! -d "$bufDir" ]; then mkdir -p "$bufDir"; fi
#распаковываем текущий файл в буферную директорию
ripmime -i "$curEML" -d "$bufDir"
#копируем из буферной директории в выходную директорию файлы *.xlsx (игнорируя регистр)
find "$bufDir" -type f -iname "*.xlsx" -exec cp {} "$outerDir" \;
#вычищаем буферную директорию:
rm "$bufDir/"*
Для этого просто после строки find "$bufDir" -type f -iname "*.xlsx" -exec cp {} "$outerDir" \;
можно дописать еще одну строку find "$bufDir" -type f -iname "*.docx" -exec cp {} "$outerDir" \;
и еще find "$bufDir" -type f -iname "*.pdf" -exec cp {} "$outerDir" \;
Словом - что требуется, то и вносим. Вот такой вот примитивный фильтр.
Сохраняем внесенные изменения. Закрываем окно gedit (или нашего текущего текстового редактора, если применяли что-то иное). Окно терминала не закрываем - продолжаем "командовать"...
2. Делаем скрипт исполняемым. Для этого выполняем команду:
chmod +x ~/unpackEML
3. Запускаем данный скрипт на каком-нибудь одном файле для проверки:
~/unpackEML /home/aik/snap/thunderbird/common/.thunderbird/ccv00u5b.default/Mail/pop.yandex.com/Inbox/cur/1553284572596000 ~/XLSX_Downloads
ls ~/XLSX_Downloads
Последняя нам покажет:
'Жалилов Б.М (собственник и страхователь Снегур Т.А.) авто 2_ КЦ 4 детализация.xlsx'
'Жалилов Б.М (собственник и страхователь Снегур Т.А.) авто 2_Лист Доставки КЦ4.xlsx'
4. Если до сих пор все правильно - можно организовать циклический перебор с помощью того же find, который применяли до сих пор, только вызываем параметром exec наш свежесозданный и протестированный скрипт:
find -L /home/aik/snap/thunderbird/common/.thunderbird/ccv00u5b.default/Mail/pop.yandex.com/Inbox/cur -type f -regextype posix-egrep -regex ".*/[0-9]*" -exec ~/unpackEML {} ~/Downloads \;
Теоретически, как мне кажется, с таким подходом можно даже из исходного каталога на разделе Windows выполнять "распаковку", - буферная папка теперь находится в домашней папке пользователя, а значит
ошибка кодировок не должна беспокоить. Сама буферная папка после выполнения последней команды из папки пользователя не удаляется.