Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Извлечение файлов  (Прочитано 5382 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн zg_nico

  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3513
  • Nil mortalibus arduum est
    • Просмотр профиля
Re: Извлечение файлов
« Ответ #15 : 23 Марта 2019, 15:50:29 »
RIS, как вариант, можно использовать ripmime: sudo apt install ripmimeС одним из файлов из архива для примера (файл лежит по пути /папка_пользователя/test/):ripmime -i ~/test/6514253442910260 -d ~/test/6514253442910260Результат: в каталоге ~/test, где лежал исходный файл, создается подкаталог  6514253442910260, в котором 4 файла (в т.ч. и вложение XLSX. В сущности дальше все зависит от того, что именно Вы хотите сделать. Проблема в том, что во многих "письмах" вложения могут называться одинаково. При извлечении этот момент необходимо учитывать, - имя каждого файла должно быть уникальным. Например, таким способом можно организовать поиск всех файлов в каталоге, имена которых состоят из цифр:find ~/test -type f -regextype posix-egrep -regex ".*/[0-9]*"Если у Вас к ним еще имеется расширение *.eml, то находит так: find ~/test -type f -regextype posix-egrep -regex ".*/[0-9]*.eml"Вот таким кодом можно распаковать все найденные файлы в подкаталоги с аналогичными файлам именами, через точку к именам подкаталогов будет дописано .files: find ~/test -type f -regextype posix-egrep -regex ".*/[0-9]*" -exec ripmime -i {} -d {}.files \;Исходя из последнего кода - остается только найти желаемые вложения, и перекопировать их в желаемый каталог (каталог, в который копируем, должен существовать; в примере - это /папка_пользователя/test/attach): find ~/test -type f -regextype posix-egrep -regex  ".*(xls|xlsx)$" -exec cp {} ~/test/attach/ \;После этого можно удалить все созданные буферные каталоги, чтобы не занимали место, например таким образом: find ~/test -type d -name "*.files" -exec rm -rf {} \;Резюмируя: вместо ~/test подставьте свой путь к файлам eml (папка, в которой подпапки, в которых eml, к примеру...), и выполните последовательно такие команды:
Код: (bash) [Выделить]
#создать папку, куда будем складывать найденные файлы
mkdir -p ~/myoutput
# найти все файлы [цифровое имя] в каталоге ~/test и распаковать их в подкаталоги ~/test/[цифровое имя].files/
find ~/test -type f -regextype posix-egrep -regex ".*/[0-9]*" -exec ripmime -i {} -d {}.files \;
# найти все файлы *xls и *xlsx в подкаталогах каталога ~/test и скопировать их в каталог ~/myoutput:
find ~/test -type f -regextype posix-egrep -regex  ".*(xls|xlsx)$" -exec cp {} ~/myoutput/ \;
# найти все подкаталоги вида [цифровое имя].files/ в каталоге ~/test и удалить их:
find ~/test -type d -name "*.files" -exec rm -rf {} \;
Или модифицируйте данные команды применительно к своему случаю.
« Последнее редактирование: 23 Марта 2019, 16:15:20 от zg_nico »
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

Оффлайн RIS

  • Автор темы
  • Активист
  • *
  • Сообщений: 303
    • Просмотр профиля
Re: Извлечение файлов
« Ответ #16 : 23 Марта 2019, 16:03:56 »
1) В Thunderbird находятся 100 000 файлов в формате eml без расширения
2) В каждом файле в формате eml без расширения есть вложения в разных форматов, например xlsx, jpg
3) Мне нужно извлекать все вложения xlsx (или все существующие вложения) в другой папке

Указать в ручную путь ripmime -i ~/test/6514253442910260 -d ~/test/6514253442910260 как вы предлагайте это невозможно на такой обьем файлов.

Оффлайн zg_nico

  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3513
  • Nil mortalibus arduum est
    • Просмотр профиля
Re: Извлечение файлов
« Ответ #17 : 23 Марта 2019, 16:11:56 »
это невозможно на такой обьем файлов
Я дико извиняюсь, а Вы дальше этих строк сообщение читали вообще?
В Thunderbird находятся 100 000 файлов в формате eml без расширения
Вот за это спасибо. Модернизировал исходный пост.
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

Оффлайн RIS

  • Автор темы
  • Активист
  • *
  • Сообщений: 303
    • Просмотр профиля
Re: Извлечение файлов
« Ответ #18 : 23 Марта 2019, 16:25:41 »
Я все читал, но ваша инструкция содержит несколько вариантов развития событий и по этому запутана, ранее я написал "Тогда среди вас есть специалист который может создавать скрипт который решит эту задачу?", готовы ли вы консультировать и написать четкую инструкцию на платной основе что бы она работала в моем случае под моей задачей?

Оффлайн zg_nico

  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3513
  • Nil mortalibus arduum est
    • Просмотр профиля
Re: Извлечение файлов
« Ответ #19 : 23 Марта 2019, 16:51:31 »
четкую инструкцию на платной основе
Меня не интересует Ваша платная основа. Инструкция выше по тексту уже составлена и написана. Ответьте четко на вопрос: Ваши файлы в каком каталоге лежат? Полный путь к одному-двум из них в системе можете написать?
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

Оффлайн RIS

  • Автор темы
  • Активист
  • *
  • Сообщений: 303
    • Просмотр профиля
Re: Извлечение файлов
« Ответ #20 : 23 Марта 2019, 17:11:51 »
1) На ноутбуке уставлены Windows 10 и Ubuntu 18.04
2) На Windows 10 установлен Thunderbird в котором находятся 100 000 писем в формате eml без расширения
3) Путь к папке с письмами с Ubuntu 18.04 на Windows 10 "/media/aik/1036BD7336BD5A84/Users/AIK/AppData/Roaming/Thunderbird/Profiles/3w24huea.default/Mail/pop.yandex.com/Inbox/cur"
4) Будучи на Ubuntu 18.04 нужно извлекать вложения в папке "/home/aik/Downloads"

Оффлайн zg_nico

  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3513
  • Nil mortalibus arduum est
    • Просмотр профиля
Re: Извлечение файлов
« Ответ #21 : 23 Марта 2019, 17:19:37 »
RIS, наводящий вопрос номер два: команда find "/media/aik/1036BD7336BD5A84/Users/AIK/AppData/Roaming/Thunderbird/Profiles/3w24huea.default/Mail/pop.yandex.com/Inbox/cur" -type f -regextype posix-egrep -regex ".*/[0-9]*" полные пути к тем самым файлам показывает?
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

Оффлайн RIS

  • Автор темы
  • Активист
  • *
  • Сообщений: 303
    • Просмотр профиля
Re: Извлечение файлов
« Ответ #22 : 23 Марта 2019, 17:27:19 »
Да, пример https://prnt.sc/n1vgbz

Оффлайн zg_nico

  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3513
  • Nil mortalibus arduum est
    • Просмотр профиля
Re: Извлечение файлов
« Ответ #23 : 23 Марта 2019, 17:40:03 »
RIS, тогда далее в терминале выполняем по одной за раз команды:
mypath="/media/aik/1036BD7336BD5A84/Users/AIK/AppData/Roaming/Thunderbird/Profiles/3w24huea.default/Mail/pop.yandex.com/Inbox/cur"
find $mypath -type f -regextype posix-egrep -regex ".*/[0-9]*" -exec ripmime -i {} -d {}.files \;
find $mypath -type f -regextype posix-egrep -regex  ".*(xls|xlsx)$" -exec cp {} ~/Downloads/ \;
find $mypath -type d -name "*.files" -exec rm -rf {} \;
И показываем вывод ls ~/Downloads/ | head -n 10
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

Оффлайн RIS

  • Автор темы
  • Активист
  • *
  • Сообщений: 303
    • Просмотр профиля
Re: Извлечение файлов
« Ответ #24 : 23 Марта 2019, 17:51:37 »
После запуска команды mypath="/media/aik/1036BD7336BD5A84/Users/AIK/AppData/Roaming/Thunderbird/Profiles/3w24huea.default/Mail/pop.yandex.com/Inbox/cur"
find $mypath -type f -regextype posix-egrep -regex ".*/[0-9]*" -exec ripmime -i {} -d {}.files \;
find $mypath -type f -regextype posix-egrep -regex  ".*(xls|xlsx)$" -exec cp {} ~/Downloads/ \;
find $mypath -type d -name "*.files" -exec rm -rf {} \;
получаю результат https://prnt.sc/n1vouk, не ждал завершения так как выдает постоянно аналогичную ошибку.

После запуска второй команды ls ~/Downloads/ | head -n 10 получаю ответ https://prnt.sc/n1vpbs

Оффлайн zg_nico

  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3513
  • Nil mortalibus arduum est
    • Просмотр профиля
Re: Извлечение файлов
« Ответ #25 : 23 Марта 2019, 17:52:53 »
RIS, не забыли до всего этогоsudo apt install ripmimeслучайно?
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

Оффлайн RIS

  • Автор темы
  • Активист
  • *
  • Сообщений: 303
    • Просмотр профиля
Re: Извлечение файлов
« Ответ #26 : 23 Марта 2019, 18:02:51 »
На команду sudo apt install ripmime получил результат https://prnt.sc/n1vrp6
На команду mypath="/media/aik/1036BD7336BD5A84/Users/AIK/AppData/Roaming/Thunderbird/Profiles/3w24huea.default/Mail/pop.yandex.com/Inbox/cur"
find $mypath -type f -regextype posix-egrep -regex ".*/[0-9]*" -exec ripmime -i {} -d {}.files \;
find $mypath -type f -regextype posix-egrep -regex  ".*(xls|xlsx)$" -exec cp {} ~/Downloads/ \;
find $mypath -type d -name "*.files" -exec rm -rf {} \;
началась обработка но выходит ошибка в кодировке https://prnt.sc/n1vthj

Пользователь добавил сообщение 23 Марта 2019, 18:09:55:
1) Проверил еще вариант, скачал 3 файла http://bit.ly/2CzB2l7 в формате eml без расширения https://prnt.sc/n1vw8e
2) Запустил команду mypath="~/eml/"
find $mypath -type f -regextype posix-egrep -regex ".*/[0-9]*" -exec ripmime -i {} -d {}.files \;
find $mypath -type f -regextype posix-egrep -regex  ".*(xls|xlsx)$" -exec cp {} ~/Downloads/ \;
find $mypath -type d -name "*.files" -exec rm -rf {} \;
и получаю ошибку https://prnt.sc/n1vwoh
« Последнее редактирование: 23 Марта 2019, 18:09:55 от RIS »

Оффлайн zg_nico

  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3513
  • Nil mortalibus arduum est
    • Просмотр профиля
Re: Извлечение файлов
« Ответ #27 : 23 Марта 2019, 18:12:29 »
выходит ошибка в кодировке
Вы меня простите, но Правила форума действуют для всех пользователей, включая Вас. Есть там два пункта, которые Вы в последних сообщениях игнорируете напрочь:
Цитировать
1.4. Листинги и содержимое текстовых файлов следует добавлять в сообщение с помощью тегов [spoiler]...[/spoiler] или [code]...[/code], либо прикреплять к сообщению в виде отдельного файла.
Цитировать
1.5. Для добавления графических изображений в сообщения требуется использовать внешние сервисы. Включение в сообщения полноразмерных изображений, превышающих разрешённые размеры, допускается исключительно в виде превью.
Словом, первое устное предупреждение. Копируйте текст из окна терминала и вставляйте в сообщение на форум. Вглядываться в Ваши картинки у меня нет никакого желания (уверен что и у других форумчан - тоже.
Файл 1553284572596000, на вложения которого идет ругань в кодировке выложите на файлообменник и дайте ссылку - хочу посмотреть его у себя.
« Последнее редактирование: 23 Марта 2019, 18:14:37 от zg_nico »
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

Оффлайн RIS

  • Автор темы
  • Активист
  • *
  • Сообщений: 303
    • Просмотр профиля
Re: Извлечение файлов
« Ответ #28 : 23 Марта 2019, 18:37:48 »
В процессе консультации на другие источники ранее все просили фото, мне даже проще отправить текст если так нужно.
Запрашиваемый файл который выдает ошибку в кодировке http://bit.ly/2JvY02u

Оффлайн zg_nico

  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3513
  • Nil mortalibus arduum est
    • Просмотр профиля
Re: Извлечение файлов
« Ответ #29 : 23 Марта 2019, 19:08:49 »
Проверил еще вариант
Потому что не надо в переменную в bash совать спецсимволы вида ~ когда речь идет о каталогах. Используйте вместо этого либо $HOME либо прямым текстом вписывайте имя каталога. На это у Вас find и ругается.
Относительно кодировок: файл скачал, проверил. У меня он распаковался нормально. Среди вложений есть странный файл с именем 'Жалилов Б.М (собственник и страхователь Снегур Т.А.) авто 2_ КЦ 4 детализ'$'\320'но в моем случае терминал на это не ругался. Скачал Ваш файл. Он попал в мою папку .../Загрузки. Создал папку ~/Downloads, чтобы все было как у Вас в "ТЗ". Далее делаю так:mypath="$HOME/Загрузки/"
find $mypath -type f -regextype posix-egrep -regex ".*/[0-9]*" -exec ripmime -i {} -d {}.files \;
find $mypath -type f -regextype posix-egrep -regex  ".*(xls|xlsx)$" -exec cp {} ~/Downloads/ \;
find $mypath -type d -name "*.files" -exec rm -rf {} \;
ls ~/Downloads
В ответ вижу'Жалилов Б.М (собственник и страхователь Снегур Т.А.) авто 2_ КЦ 4 детализация.xlsx'
'Жалилов Б.М (собственник и страхователь Снегур Т.А.) авто 2_Лист Доставки КЦ4.xlsx'
Остался один вопрос: почему это не работает у Вас. Могу лишь предположить, что где-то умудряетесь допустить ошибку. Может, длина полного имени файла виновата...
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

 

Страница сгенерирована за 0.039 секунд. Запросов: 22.