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


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

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

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

Оффлайн codrilla

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Сортировка файлов
« : 30 Января 2013, 12:00:15 »
Передо мной стоит задача: в папке документы находится большое количество папок, эти папки в свою очередь содержат по 500 файлов (количество значения не имеет), мне нужно из этих файлов выбрать те, которые являются картинками и размером больше 100 кб и переместить в отдельную папку. Опыта в написании скриптов совсем нет. Если поможете с синтаксисом или хотя бы скажете, с чего начать, буду очень благодарен.

Глупый_Мо

  • Гость
Re: Сортировка файлов
« Ответ #1 : 30 Января 2013, 12:05:29 »
расширения картинок известно?

Глупый_Мо

  • Гость
Re: Сортировка файлов
« Ответ #2 : 30 Января 2013, 12:06:53 »
Скорее всего хватит find и exec почитайте.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Сортировка файлов
« Ответ #3 : 30 Января 2013, 12:07:50 »

Оффлайн codrilla

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Сортировка файлов
« Ответ #4 : 30 Января 2013, 12:19:23 »
расширения картинок известно?
Пусть будет jpg, хотя и другие могут быть, но хотя бы для этого.
Изучить:
man find
http://ru.wikipedia.org/wiki/Find
Так, уже читаю.

Пользователь решил продолжить мысль 30 Января 2013, 12:42:18:
Так, ну начало положено.

#!/bin/bash
printf "Начало положено...\n"
# ищем файлы с указанным расширением, размером больше 100 КБ, причем регулярные файлы
find . \( -name "*jpg" -o -name "*jpeg" -o -name "*png" -o -name "*bmp" \) -size +100K -type f

Данный код по идее должен вывести все файлы удовлетворяющие условию. Сейчас возможности проверить нету. На работе стоит не Ubuntu.

Немного допишем код.
#!/bin/bash
printf "Начало положено...\n"
# ищем файлы с указанным расширением, размером больше 100 КБ, причем регулярные файлы
find . \( -name "*jpg" -o -name "*jpeg" -o -name "*png" -o -name "*bmp" \) -size +100K -type f -exec cp /Documents/result/ "{}" \;
printf "Готово.\n"

Теперь он по идее должен перемещать все файлы в папку /Documents/result/
Поправьте меня, если я не прав.

И у меня ещё вопрос. Файлов всё-таки будет большое количество. Можно ли сделать так, чтобы в командной строке появлялось сообщение типа "Обрабатывается файл такой-то" и желательно, чтобы это была одна строка, то есть не выводилось постоянно Обрабатывается файл такой-то Обрабатывается файл такой-то Обрабатывается файл такой-то, А было одно Обрабатывается файл, а "такой-то" менялось на значение файла
« Последнее редактирование: 30 Января 2013, 12:42:18 от codrilla »

Глупый_Мо

  • Гость
Re: Сортировка файлов
« Ответ #5 : 30 Января 2013, 12:50:55 »
Цитировать
И у меня ещё вопрос. Файлов всё-таки будет большое количество. Можно ли сделать так, чтобы в командной строке появлялось сообщение типа "Обрабатывается файл такой-то" и желательно, чтобы это была одна строка, то есть не выводилось постоянно Обрабатывается файл такой-то Обрабатывается файл такой-то Обрабатывается файл такой-то, А было одно Обрабатывается файл, а "такой-то" менялось на значение файла

через переменные и echo

Оффлайн codrilla

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Сортировка файлов
« Ответ #6 : 30 Января 2013, 12:58:24 »
Цитировать
И у меня ещё вопрос. Файлов всё-таки будет большое количество. Можно ли сделать так, чтобы в командной строке появлялось сообщение типа "Обрабатывается файл такой-то" и желательно, чтобы это была одна строка, то есть не выводилось постоянно Обрабатывается файл такой-то Обрабатывается файл такой-то Обрабатывается файл такой-то, А было одно Обрабатывается файл, а "такой-то" менялось на значение файла

через переменные и echo
По-моему, это очевидно. Вопрос в том, куда вставить это эхо, я так понимаю в екзек, но как получить имя файла и как разделить две команды в екзек (точкой с запятой или в скобки взять или как) и как сделать, чтобы эти ехо замещали друг друга, а не выходили один за другим. Спасибо.

Пользователь решил продолжить мысль 30 Января 2013, 13:01:24:
И ещё дополню. Если ехо будет в екзек, то там следует написать что-то вроде файл такой-то удовлетворяет условиям и перемещается в папку. А вот, где написать, что сейчас выполняется проверка такого-то файла, не имею представления.
« Последнее редактирование: 30 Января 2013, 13:01:24 от codrilla »

Глупый_Мо

  • Гость
Re: Сортировка файлов
« Ответ #7 : 30 Января 2013, 13:05:19 »
ну можно ведь и отойти от find, есть много способов.

Оффлайн codrilla

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Сортировка файлов
« Ответ #8 : 30 Января 2013, 13:08:03 »
Скорее всего хватит find и exec почитайте.
Изучить:
man find
http://ru.wikipedia.org/wiki/Find

Все посоветовали, в том числе и вы, использовать find, вот я и использовал. А как можно ещё, чтобы сделать с информативным выводом?

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Сортировка файлов
« Ответ #9 : 30 Января 2013, 13:18:29 »
А как можно ещё, чтобы сделать с информативным выводом?
Ну, ключики есть не только у find. :)
man cp
PS
Если желаете лицезреть прогресс копирования по каждому файлу, то вместо cp можно взять rsync.
« Последнее редактирование: 30 Января 2013, 13:21:02 от ArcFi »

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3473
  • nix - вот оно счастье...
    • Просмотр профиля
Re: Сортировка файлов
« Ответ #10 : 30 Января 2013, 13:19:14 »
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Оффлайн Jack Sparrow

  • Активист
  • *
  • Сообщений: 641
    • Просмотр профиля
Re: Сортировка файлов
« Ответ #11 : 30 Января 2013, 13:35:13 »
Не Линукс, а Мак, но должно и на Линуксе работать. Использую такой код
# Найти определенные файлы и переместить их в другое место
find . -iname "*.jpg" -o -iname "*.png" -size +100k | xargs -I {} mv {} /куда/переместить
Linux is only free if your time has no value (c) Jamie Zawinski

Оффлайн codrilla

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Сортировка файлов
« Ответ #12 : 30 Января 2013, 13:44:15 »
А как можно ещё, чтобы сделать с информативным выводом?
Ну, ключики есть не только у find. :)
man cp
PS
Если желаете лицезреть прогресс копирования по каждому файлу, то вместо cp можно взять rsync.

Желаю лицезреть, какой именно файл сейчас обрабатывается файндом, с копированием потом. Хотя посмотрел на ключи cp и ничего подходящего для себя не нашёл. В общем-то и в rsync тоже ничего не увидел. Единственное, ключ -v, но это надо тестировать. Может его к файнд можно прицепить?

Пользователь решил продолжить мысль 30 Января 2013, 13:45:22:
http://habrahabr.ru/post/99187/


Не разобрался как мне это поможет, ведь сам процесс копирования занимает мало времени, меня интересует, какой именно файл обрабатывается в данный момент.

Пользователь решил продолжить мысль 30 Января 2013, 13:46:36:
Не Линукс, а Мак, но должно и на Линуксе работать. Использую такой код
# Найти определенные файлы и переместить их в другое место
find . -iname "*.jpg" -o -iname "*.png" -size +100k | xargs -I {} mv {} /куда/переместить

Фактически, это то, что у меня уже есть. Только вы использовали xargs вместо exec.
« Последнее редактирование: 30 Января 2013, 13:50:02 от codrilla »

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3473
  • nix - вот оно счастье...
    • Просмотр профиля
Re: Сортировка файлов
« Ответ #13 : 30 Января 2013, 13:49:24 »
ну вы хотели визуализацию, вот я и предложил прогрессбар как визуальное отоброжение проделаной работы в общем а не над конкретным файлом...
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Глупый_Мо

  • Гость
Re: Сортировка файлов
« Ответ #14 : 30 Января 2013, 13:49:31 »
можно сделать через цикл while read x.
Сначала найдем все файлы с картинками, затем через канал передаем на while read x, который перемещает файлы и если перемещение удалось (&&) выводит сообщение что файл перемещен (echo $x перемещенн)

 

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