Сисадмин-любитель (ulrith) wrote,
Сисадмин-любитель
ulrith

восстановление испорченного времени последнего изменения (last modified time) у папок

Мне в работе удобно использовать сведения о последнем изменении папок — я сортирую их по этому параметру и сразу получаю список клиентов в порядке их обслуживания.

Однако эта полезная информация может потеряться, если папка попадёт (случайно или намеренно) в обработку какой-либо программой, оставляющей в папке свои служебные файлы — например, Picasa (оставляет в папке файл Picasa.ini). В этом случае дата последнего изменения папки становится такой же, как у этого служебного файла — т.е. датой последнего посещения папки программой.

Что же делать, если такое безобразие у нас произошло? Применим unix way. :-)

Сначала удалим наши папки из списка просматриваемых папок Picasa. Затем удалим во всех папках вместе с подпапками служебные файлы программы:

find . -depth -name Picasa.ini -type f -delete

Теперь можно заняться восстановлением правильных дат папок. Откуда их брать? Очевидное решение, сразу приходящее на ум: из самой папки, точнее у самого нового файла этой папки (который, после удаления Picasa.ini, отражает настоящую дату последнего изменения этой папки). По идее, аналогичную процедуру надо бы проделать и со всеми подпапками, но в моём конкретно случае смысла в этом никакого нет, поэтому я ограничился тем, что исключил все подпапки моих папок из алгоритма, ориентируясь на даты последней модификации только регулярных файлов папки. (Кто-нибудь что-нибудь понимает? :-)

Итак, вот мой скрипт для bash (параметром передаётся папка, содержащая пациентов):

#!/bin/bash
cd "$1"
for f in *
do
if [ -d "$f" ]
then
touch -m -r"$f/`ls -t -r --group-directories-first -1 "$f" | tail -1`" "$f"
fi
done


Основная команда внутри цикла делает вот что: берёт последний элемент списка файлов внутри папки, упорядоченного по дате изменения (самые новые внизу), с папками и регулярными файлами, сгруппированными вместе (так что последним может оказаться только регулярный файл), и ставит текущей папке такую же дату изменения, как у этого файла. (Что, и сейчас понятно? 8-)

Ну вот, теперь наши папочки снова все с правильными датами последнего изменения. :-)
Tags: unixway
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments