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


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

Автор Тема: Скрипт на bash. Удалять файлы если кол-во больше чем  (Прочитано 5239 раз)

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

Оффлайн Dark Smoke

  • Автор темы
  • Активист
  • *
  • Сообщений: 311
    • Просмотр профиля
    • Абонентское обслуживание и ремонт компьютеров в Днепропетровске
Добрый день
Помогите, пожалуйста со скриптом:
Есть папки:
dir_2017-02-23
dir_2017-02-25
dir_2017-03-01
dir_2017-03-05
dir_2017-03-07
dir_2017-03-011

Как мне оставлять последние 5 папок, самых свежих? Даты папок могут неделями или месяцами не меняться, а через месяц добавиться одна новая. И тогда одна самая старая должна удалиться.

ТС, как видно по состоянию на 30/01/2020 потерял интерес к созданной им теме (пометка Решено в теме отсутствует, тема оставлена не закрытой, сообщений в теме давно не было). На реплики форумчан реакции со стороны ТС нет. Тема стародавняя (последнее сообщение в топике: 02/01/2018; последнее сообщение от ТС в топике: 14/03/2017). Модератором раздела принято решение закрыть тему.
--zg_nico
« Последнее редактирование: 30 Января 2020, 19:38:17 от zg_nico »

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
ls -rt
последный строк и новый дату.

Цитировать
dir_2017-03-07
for d in dir_*
do
d1=`echo $d | sed 's/.*dir_//g'`
d2=`date -d "$d1" +%s`
d3="$d2 $d"
echo $d3
done | sort -k1 -nr
Wars ~.o

Оффлайн fluf

  • Любитель
  • *
  • Сообщений: 53
    • Просмотр профиля
ls -tr | head -n -5 | xargs --no-run-if-empty rm -r

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
ls -tr | head -n -5 | xargs --no-run-if-empty rm -r
Неправильно.
1. ls -tr - выводит и папки и файлы.
2. "head -n -5 | xargs --no-run-if-empty rm -r" - это удалить пять самых старых, а не все кроме пяти самых новых.

Правильно:
find '/путь/до/папки' -mindepth 1 -maxdepth 1 -type d -printf '%T@ %p\n' | sort -rnk1 | awk 'NR>5 { sub(/^\S+ /, "", $0); system("rm -r -f \"" $0 "\"")}'

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн fluf

  • Любитель
  • *
  • Сообщений: 53
    • Просмотр профиля
ls -trd */ | head -n -5 | xargs --no-run-if-empty rm -r
renzrv, теперь идеально?

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
fluf,
Короче - не всегда лучше. В bash-скриптах никогда не использую вывод ls для подобных задач, только find.

Оффлайн krishnoved

  • Любитель
  • *
  • Сообщений: 55
    • Просмотр профиля
ls -tr | head -n -5 | xargs --no-run-if-empty rm -r
Неправильно.
1. ls -tr - выводит и папки и файлы.
2. "head -n -5 | xargs --no-run-if-empty rm -r" - это удалить пять самых старых, а не все кроме пяти самых новых.

Правильно:
find '/путь/до/папки' -mindepth 1 -maxdepth 1 -type d -printf '%T@ %p\n' | sort -rnk1 | awk 'NR>5 { sub(/^\S+ /, "", $0); system("rm -r -f \"" $0 "\"")}'

А если нужно удалить файлы а не папки?

Оффлайн Vitsliputsli

  • Старожил
  • *
  • Сообщений: 1293
    • Просмотр профиля
тогда заменить "-type d" на "-type f"

 

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