LINUX.ORG.RU

как найти «самую свежую» директорию ...

 , ,


1

2

Приветствую.

Может кто решал вопрос: «поиск самой свежей» директории и удаление остальных. Штука в том, что может быть и одна поддиректория - тогда пусть лежит, но если 2 и более - оставить надо директорию, что является самой последней, а остальные удалить. Сами директории могут иметь разницу как в несколько часов, так и в несколько месяцев.

Возможно это реализовать на bash?


find . -type d -exec stat -c $'%Y\t%n' {} + | sort -n | cut -f2 | head -n -1 | rm -rf

не проверял. в текущей директории удалит все директории с их содержимым, кроме самой «свежей» директории. с ходу возможна проблема, когда самая свежая находится уровнем ниже от той что старше и она будет тоже удалена)) тут без более четкой формулировки задачи не обойтись.

nerve ★★ ()

find ищет каталоги, печатает время модификации каталога (%As) и имя каталога. Можно через stat печатать время модификации (%Y)

sort + cut

все кроме последнего можно получить через head

Только на bash без других программ будет чуть сложнее.

В цикле: ищем каталог, потом ищем другой каталог, который новее первого (через test -nt). Если такой есть, то удаляем первый каталог, иначе заканчиваем работу.

vel ★★★★★ ()
Ответ на: комментарий от vel

фи

Не, ну find + сделает достаточно быстро, зато не надо проверять, поддерживает ли встроенный в find опцию -ptintf вообще (posix - нет), и (XXX) в частности.

vodz ★★★★★ ()

Я когда-то решал задачу поиска последнего файла, который подвергся изменениям. Очень хотелось понять какие файлы модифицирует KDE, когда я в System Settings проставляю определённые галочки.

Привожу команду как есть, рабочая на 100%. Сможешь адаптировать под свою задачу?

$ find .kde4 .config .local -type f -mtime 0 -printf "%T@ %TX - %h/%f\n" | sed s/.0000000000//g | sort -r | head
Kroz ★★★★★ ()
Последнее исправление: Kroz (всего исправлений: 3 )
Ответ на: комментарий от vel

А где find без -printf кроме как в оффтопике ?

В рутере? В говомамонтовых unix-ах? (особенно касательно (XXX)-расширений - 100% GNU-тость).

vodz ★★★★★ ()

Если там только директории, у них в именах нет пробелов и они начинаются не с точек, то

rm -Rf `ls --sort=time | tail -n +2`

не надо ужасаться длинному списку условий, он вполне реалистичен если надо просто почистить например старые бекапы, имена которых ты сам выбирал

firkax ★★★ ()
Последнее исправление: firkax (всего исправлений: 1 )
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.