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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Поиск grep запокавать все в архив zip  (Прочитано 1384 раз)

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

Оффлайн livanda

  • Автор темы
  • Участник
  • *
  • Сообщений: 233
  • За мной будущее! А что за вами?
    • Просмотр профиля
Поиск grep запокавать все в архив zip
« : 03 Декабря 2015, 02:09:55 »
Я не очень хорошо понимаю как работа данная программа grep.
Мне нужно писать скрит для электронной книги по сколку сама книга может читать файлы .txt .fb2  которые были запакованные в zip архив. А вот теперь самое интересное.
как можно сделать так чтобы grep нашел все эти файлы и запаковал их в отдельный архив. при этом чтобы с экономить место на флешке нужно архив старый удалить. Еще хотело бы добавить в исключение некоторые имена файлов которые архивировать не нужно, такие "readme.txt и info.txt" пока потяни не имею как это сделать(

adawdp

  • Гость
Re: Поиск grep запокавать все в архив zip
« Ответ #1 : 03 Декабря 2015, 04:09:43 »
2015 Dec 02; 08:09 PM; Oakville, ON, Canada.

— Я оформлю ваше сообщение следующим образом :):
Цитировать
— Я не очень хорошо понимаю как работа данная программа grep.

— Мне нужно писать скрипт для электронной книги.

Поскольку сама книга может читать файлы .txt .fb2  которые были запакованные в zip архив.

— А вот теперь самое интересное, при этом чтобы сэкономить место на флешке нужно архив старый удалить.

— Еще хотелось бы добавить в исключение некоторые имена файлов которые архивировать не нужно, такие "readme.txt и info.txt" пока понятия не имею как это сделать :(

— Там где красным, надеюсь, опечатки  :)

— Я тоже не знаю как работает программа grep, но для того, чтобы нею воспользоваться этого знать не нужно :), нужно знать где „руль и горловина бензобака” в этой программе, надеюсь сравнение понятно :)!

— Введя в поиск „Linux найти и переместить нужные файлы“, без кавычек, естественно можно получить сразу ответ например вот из этой статьи http://habrahabr.ru/post/150830/ на одну из частей вашего вопроса.
— Там вот такая команда
Код: (bash) [Выделить]
find ./ -type 'f' | grep -v 2 | xargs -n 1 -I % cp --parents  "%"  /path/to/dest/dir/которую если немного подправить она выполнит часть вашей задачи :).

— Ваша задача по написанию скрипта легко разбивается на части при этом задачи стоят общеизвестные. Читайте в интернете материалов тьма, готовьте проект скрипта, если скрипт будет “криво” работать, знающие люди Вам его подправят.

— Если у Вас нет времени писать проект скрипта, закажите его кому-нибудь, заплатите Вам напишут.

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: Поиск grep запокавать все в архив zip
« Ответ #2 : 03 Декабря 2015, 07:48:30 »
livanda,
Выполни в папке с файлами:
find -type f ! -empty ! -iname "readme.txt" ! -iname "info.txt" -iname "*.txt" -iname "*.fb2" -exec cp -t "/path/to/folder" {} +Команда скопирует файлы в "/path/to/folder"
Затем перейди в директорию "/path/to" которая содержит директорию folder и выполни:
zip -r Arh_name.zip folderГде: Arh_name.zip - имя архива,
folder - имя директории с файлами.
« Последнее редактирование: 03 Декабря 2015, 08:16:04 от Cxms »

Оффлайн livanda

  • Автор темы
  • Участник
  • *
  • Сообщений: 233
  • За мной будущее! А что за вами?
    • Просмотр профиля
Re: Поиск grep запокавать все в архив zip
« Ответ #3 : 03 Декабря 2015, 09:25:32 »
adawdp,
Большое Спасибо. Но я на эту статью натыкалась и побывала это все сделать. Но получается какая то ерунда. вписываю вот это
find ./ -type 'f' | grep -e "*.fb2"Вот она ищет что в самом файле, а мне нужен сам файл я вот этого понять не могу((((


Ps... Вечером все ошибки испарвлю

Пользователь решил продолжить мысль [time]03 Декабрь 2015, 10:27:23[/time]:
livanda,
Выполни в папке с файлами:
find -type f ! -empty ! -iname "readme.txt" ! -iname "info.txt" -iname "*.txt" -iname "*.fb2" -exec cp -t "/path/to/folder" {} +Команда скопирует файлы в "/path/to/folder"
Затем перейди в директорию "/path/to" которая содержит директорию folder и выполни:
zip -r Arh_name.zip folderГде: Arh_name.zip - имя архива,
folder - имя директории с файлами.

В этом вот тоже проблема, нужно путь сохранить. Книги уже про сартированы по папкам. Мне кажется самое оптимальное это grep но я вообще не понимаю как и что делать. сижу вот эксперемнтирую

Пользователь решил продолжить мысль 03 Декабря 2015, 09:31:47:
Cxms,
И да нужен чтобы каждый файл был в отдельном архиве а не все в одном((((
« Последнее редактирование: 03 Декабря 2015, 09:31:47 от livanda »

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Поиск grep запокавать все в архив zip
« Ответ #4 : 03 Декабря 2015, 14:12:56 »
find ./ -type 'f' | grep -e "*.fb2"
find ./ -type 'f' | grep -e ".fb2"Истина где-то рядом.
ЗЫ все "хотелки" реализуемы. Проблема только в количестве кода и его красоте. Лично я бы делал сохранение в папках циклом, но уверен есть решения по лучше.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Поиск grep запокавать все в архив zip
« Ответ #5 : 03 Декабря 2015, 14:21:04 »
livanda, Давайте по порядку. Где находятся исходные файлы, в архиве? Что ещё в нём находится(какие файлы)? Существует ли структура внутри исходного архива(папки, вложенные папки…)? И что именно Вы хотите(извлечь из архива только файлы .fb2 и запаковать каждый в отдельный архив)?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: Поиск grep запокавать все в архив zip
« Ответ #6 : 03 Декабря 2015, 17:40:58 »
livanda,
Скрипт:
Код: (bash) [Выделить]
#!/bin/bash

# Полный путь к директории с файлами
SRC_DIR="/path/to/dir"

IFS=$'\n'
for FILE in $(find "$SRC_DIR" -type f ! -empty ! -iname "readme.txt" ! -iname "info.txt" \( -iname "*.txt" -o -iname "*.fb2" \) -print); do
FILE_NAME="$(basename -z "$FILE")"
cd "$(dirname -z "$FILE")" || { echo "Error"; continue; }
zip "$FILE_NAME".zip "$FILE_NAME" && rm "$FILE_NAME"
done

Скрипт найдет в директории SRC_DIR и всех поддиректориях файлы *.txt и *.fb2 (кроме пустых, readme.txt и info.txt) запакует каждый файл в zip, и удалит исходный файл не изменяя при этом структуру каталогов.

(Нажмите, чтобы показать/скрыть)
PS: Проверен. Работает.
« Последнее редактирование: 04 Декабря 2015, 03:25:40 от Cxms »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Поиск grep запокавать все в архив zip
« Ответ #7 : 03 Декабря 2015, 17:58:21 »
Cxms, а если пробелы в именах?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: Поиск grep запокавать все в архив zip
« Ответ #8 : 03 Декабря 2015, 18:02:39 »
Azure,
IFS=$'\n'И с пробелами все ок  :)
« Последнее редактирование: 03 Декабря 2015, 18:14:04 от Cxms »

 

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