LINUX.ORG.RU

Найти недавно СОЗДАННЫЕ файлы в скрипте

 , ,


0

3

Привет всем!

Что-то туплю... Для скрипта надо получить список файлов, которые были созданы N минут назад или более свежие. Нагугливается только «find -cmin -N». Но, насколько я понимаю, это не то, т.к. -cmin это время модификации inode. Т.е. найдутся не только созданные файлы, но и, те, у которых поменялись атрибуты.

Как сделать правильно?
Спасибо!

★★★★★

Разве что по ctime. Или патчить ФС, чтобы в ctime было только время создания. По-другому никак, насколько я знаю.

evilface ★★
()

Никак. В основных линуксовых фс даже нет поля для хранения даты создания.

Nao ★★★★★
()

Когда-то вот энтой командой выводил недавно модифицированные конфиги

$ find .kde4 .config -type f -mtime 0 -printf "%T@ %TX - %h/%f\n" | sed s/.0000000000//g | sort -r | head

Под свою задачу адаптируешь?

Kroz ★★★★★
()

зато posix. цени.

af5 ★★★★★
()

Что такое «создали файл» в твоей задаче? Какие файлы считать новыми после:

ln old new #появилась ссылка на старый файл
mv old new #тот же файл назвали иначе
echo >old #на то же место положили совсем другое
rm old && echo >old #заменили всё но назвали так же
cp old temp && mv temp old #подвигали данные по диску

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

Что такое «создали файл» в твоей задаче?

Конкретно в моём случаем это: «В директории появилась новая запись с новым именем (длинный хеш, поэтому ооочень маловероятно, что попадёт на старое), соответствующая новому содержимому».

Хотел изучить, как одна CMS работает с кешем. Наверное, cmin/ctime тоже вполне достаточно, но я решил уточнить, как это делать правильно.

ls-h ★★★★★
() автор топика
Ответ на: комментарий от ls-h

с новым именем

Тогда нужно обрабатывать имена:

ls | sort >/tmp/filelist
sleep Nминут
ls | sort | comm -23 /dev/stdin /tmp/filelist
DonkeyHot ★★★★★
()
Ответ на: комментарий от af5

зачем иноды вообще назвали файлами

А они так и не называются. Насколько я понял, «файл» это, скорее, его содержимое. Например, иноды могут описавать каталоги, которые файлами почти никто не называет.

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

«Файл» — это скорее связь вида «айнода»+«содержимое», то есть данные и мета-данные о данных. И «каталог» — это отдельный вполне себе полноценный тип файла (именно тип на уровне ФС, а не картинки-музыка). Ибо у него есть айнода, в которой указано, что он каталог, у него есть содержимое, в котором, грубо говоря, список имён (жёских ссылок) и соответствующих им айнод.

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

Спасибо, не знал что в ext4 добавили.

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

«Файл» — это скорее связь вида «айнода»+«содержимое»

В vfat, AFAIK инодов нету, а файлы есть. Вывод?

И «каталог» — это отдельный вполне себе полноценный тип файла

То, что т.н. «каталог» и «файл» идентичны с точки зрения устройства мира, не означает, что слово «каталог» описывает частный случай того, что описывает слово «файл». Последнее - вопрос, в первую очередь, словарный. Т.е. их можно определить так, как ты описал, а можно и иначе - как 2 непересекающиеся частных случая чего-то, хранящегося в файловой системе. И, как мне кажется, человечество склонно использовать второй вариант. Пока.

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

Можно ещё «плоски» ФС приплести, или как их там. Но зачем?

При рассмотрении с точки зрения того, как в юниксах всё _реализовано_, каталог вполне себе файл. Как, собственно, и всякие остальные блочные/символьный устройства, пайпы, двери, etc.

evilface ★★
()

как вариант мониторить появление новых файлов с помощью inotify и записывать пару дата/время-файл-действие куда либо.

затем извлекать записи удовлетворяющие твоему критерию времени.

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

inotify

Попробую сделать через него. Спасибо!

ls-h ★★★★★
() автор топика

Обнаруживать файлы заранее, ведя лог появления новых файлов с помощью inotifywait. И делать выборку файлов для работы с ними из лога с учётом времени

Dron ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.