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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Заархивировать папку, исключить файлы по размеру?  (Прочитано 2019 раз)

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

Оффлайн bioz00

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
В winrar'e под виндой есть опция - "архивировать файлы размером не более", как задать эту опцию в архиваторе под ubuntu?

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Для файлов меньше 1Gfind your_dir -size -1G -exec tar -aJcf archive_name '{}' \+
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн БТР

  • Заслуженный пользователь
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6256
    • Просмотр профиля
unix-way - одна задача, одно приложение.

искать файлы не более заданного размера | конвейер | передать на обработку архиватору

Azure, опередил с готовым решением  :)

Оффлайн bioz00

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Спасибо за ответы!

Помогло не очень  :-\
При указании -size -10M в архив добавляется все, что можно, включая файлы размером более 10мб. При указании -size 1M архив вообще не создается, хотя множество файлов размером меньше мега. Я не понял, как это работает.

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Как работает:
-10M до 10 Мб
+10М от 10 Мб и больше
 10М размером =10 Мб
Что не так, давайте проверимfind your_dir -size -10M -exec du -s {} \; | sort -rn | head
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн bioz00

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Цитировать
Что не так, давайте проверим

find your_dir -size -10M -exec du -s {} \; | sort -rn | head

Файлы выводятся правильно. Я даже больше скажу:
find your_dir -size -1G -exec tar -aJcf archive_name '{}' \+Попробовал ставить +10 - все работает правильно. Если -10 - архивируется все подряд.
В итоге сделал так:
find my_folder -size -10M > filelistфайллист создается правильный, далее
tar -cvjf archive.tar -T filelistАрхивирует все подряд, начиная с корневой указанной папки. Если из filelist вручную убрать строки указывающие на папки (например /home/admn/archive), то архивирует то, что нужно.
Может бага какая?

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Для файлов меньше 1Gfind your_dir -size -1G -exec tar -aJcf archive_name '{}' \+
Похоже небольшая опечатка
find your_dir -size -1G -exec tar -aJcf archive_name '{}' \;

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Файлы выводятся правильно.
файллист создается правильный, …
Архивирует все подряд, начиная с корневой указанной папки. Если из filelist вручную убрать строки указывающие на папки (например /home/admn/archive), то архивирует то, что нужно.
Может бага какая?
Т.е. в выводе команды присутствуют папки? Так давайте их уберёмfind your_dir -type f -size -10М -exec tar -cvjf archive.tar.bz2 '{}' \+А лучше всего приложите список что предлагается к архивации (> filelist) с выделением того, что именно Вам надо заархивировать.
2 alexander.pronin,
Это не опечатка. ;) Взгляни на разницуfind your_dir -type f -size -10М -exec echo '{}' \+
find your_dir -type f -size -10М -exec echo '{}' \;
В 1-м случае («+») команда вызывается 1 раз и ей передается весь список найденных файлов, во 2-м («;») — команда вызывается каждый раз на каждый найденный файл.
« Последнее редактирование: 16 Июля 2014, 11:58:29 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Спасибо. Я даже не подозревал, что есть такая фича \+.

Есть пара соображений по этому поводу.

1. Но не уверен, что везде она сработает (для разных версий bash, dash).
Я обычно для более сложных обработок использую конструкцию вида
find ... \
| while read LINE
do
 ...
done

2. С полным списком возможны глюки при длинных списках.
ЗЫ. Может быть, я не прав.
« Последнее редактирование: 16 Июля 2014, 13:32:07 от alexander.pronin »

 

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