2

Как получить последний раз, когда какие-либо файлы в каталоге или его подкаталогах были изменены? например

Dir - changed 1/1/1
    Sub Dir 1 - changed 2/1/1
        Sub Dir 2 - changed 3/1/1
            File 1 - changed 10/1/1
    File 2 - change 5/1/1

Выход для этого для Dir должен быть 10/1/1 (File 1 был последним измененным). Получение последнего изменяемого имени файла является бонусом, но не обязательным.

3 ответа3

4

find <dir> -type f -printf '%T@\t%p\n' | sort -r -k1 | head -n1 возвращает строку в форме:

<seconds since epoch[1]><tab><filename>

Псевдоним или вставить в сценарий, как в следующем примере, чтобы напечатать имя файла или дату.


Давайте создадим дерево тестирования:

$ date -u; mkdir -p a/{b,c,d}/{e,f,g}
Sat May 28 17:37:52 UTC 2011

$ date -u; touch a/{b,c,d}/{e,f,g}/{foo,bar,baz}; sleep 1; date -u; touch a/c/f/bar
Sat May 28 17:38:17 UTC 2011
Sat May 28 17:38:18 UTC 2011

Получить дату: с

$ date -ud @$(find a -type f -printf '%T@\t%p\n' | sort -r -k1 | head -n1 | cut -f1)
Sat May 28 17:38:18 UTC 2011

Получить путь к файлу:

$ find a -type f -printf '%T@\t%p\n' | sort -r -k1 | head -n1 | cut -f2
a/c/f/bar

[1]: См. Время Unix в Википедии для объяснения "эпохи Unix".


Пример сценария:

#!/bin/sh
if test ! -d "${1:-.}"
then
    echo not a directory: ${1:-.} >&2
    exit 1
fi
date -d @$(find "${1:-.}" -type f -printf '%T@\t%p\n' | sort -r -k1 | head -n1 | cut -f1)

Вызов с или без <dir> качестве аргумента. Он будет использовать текущий каталог без.

0

Я использую FAR Manager, чтобы сделать что-то похожее на это, которое должно решить вашу проблему:

  FAR Manager (бесплатный и с открытым исходным кодом)
  http://www.farmanager.com/

Вот как я это делаю:

  • Перейдите в каталог, из которого я хочу начать поиск
  • Нажмите Alt-F7 (чтобы вызвать диалог поиска)
  • Искать *.* (Все файлы)
  • Выберите "Панель" после завершения поиска
  • Нажмите F9, затем L, затем L еще раз, чтобы показать полную информацию о файле
  • Нажмите CTRL-F5, чтобы отсортировать все по метке времени модификации

"Панель" помещает все результаты поиска в один длинный сортируемый список. У вас есть и другие варианты сортировки (удержание клавиши CTRL покажет их вам в нижней части экрана), и повторное нажатие на ту же комбинацию клавиш сортировки приведет к тому, что сортировка будет работать в противоположном направлении (вы можете продолжать переключаться между восходящим и нисходящим сюда).

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

0

В DOS эта команда может работать для вас, хотя и не идеально из-за врожденных ограничений команды DOS DOS:

  • DIR /A /OD /S /TW

Переключатель /TW наиболее интересен для вас, потому что он означает «показывать последнюю записанную дату» (что так близко, как я мог бы найти с помощью «DIR /?»)."до последней измененной даты).

Переключатель /OD приводит к сортировке вывода по дате. Команда DIR должна учитывать тот факт, что вы используете ключ /TW, и автоматически сортировать по этой дате.

Ключ /S включает рекурсивный поиск в подкаталогах.

Ключ /A включает все типы файлов, включая скрытые файлы. Если вы не хотите включать скрытые [и другие подобные] файлы, пропустите этот переключатель.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .