команда Linux для проверки новых файлов в файловой системе

18

У нас есть Linux-машина, мы хотели бы проверить, какие новые файлы были добавлены между определенным диапазоном дат.

У меня только SSH доступ к этому ящику, и это openSUSE 11.1

Есть ли какая-то команда, которая может дать мне список файлов, которые были добавлены в файловую систему между say 04/05/2011 и 05/05/2011

Спасибо

Отношения Габриэль

    
задан Gabriel Spiteri 05.05.2011 в 08:51
источник

4 ответа

29

Есть несколько способов сделать это.

Первый:

start_date=201105040000

end_date=201105042359

touch -t ${start_date} start

touch -t ${end_date} end

find /you/path -type f -name '*you*pattern*' -newer start ! -newer end -exec ls -s {} \;

Второй: найти файлы, измененные между 20 и 21 день назад:

find -ctime +20 -ctime -21

находит файлы, измененные между 2500 и 2800 минутами назад:

find -cmin +2500 -cmin -2800

И прочитайте этот раздел .

    
ответ дан ilalex 05.05.2011 в 09:07
  • note: ctime относится к состоянию файла, а mtime относится к содержимому / данным файла –  James C 05.05.2011 в 09:12
  • Спасибо за ответы. К счастью, эти файлы были добавлены и не модифицированы с тех пор. Таким образом, find find -cmin +1080 -cmin -1500 дал мне результаты, которые я хотел. Любое изменение для вывода даты / времени, которое было изменено, пожалуйста? –  Gabriel Spiteri 05.05.2011 в 09:36
  • Я думаю, что важно указать, что этот ответ также вернет файлы, которые были изменены в течение вашего таймфрейма, но добавлены раньше. Поэтому вы должны быть осторожны. –  jedwards 05.05.2011 в 12:22
2

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

Изменить: чтобы просмотреть файлы вместе с датами их модификации, вы можете передать результат find через xargs , чтобы запустить ls -l во всех файлах, что покажет время модификации.

find /somepath -type f ... -print0 | xargs -0 -- ls -l
    
ответ дан Ryan Thompson 05.05.2011 в 09:03
  • В моем случае я знаю, что последнее изменение = дата создания, так как я уверен, файлы, где не были изменены. Я использовал команду find -cmin +1000 -cmin -1500 и дал мне список файлов :) .... и возможность выводить дату / время, когда оно было изменено? –  Gabriel Spiteri 05.05.2011 в 09:41
  • Я отредактирую свой ответ, чтобы показать, как указать дату изменения. –  Ryan Thompson 05.05.2011 в 09:44
  • Великолепный друг ... большое спасибо. На всякий случай, если кто-то еще прочтет это, конечной командой было: find / mypath -type f -cmin +1000 -cmin -1500 -print0 | xargs -0 - ls -lcode –  Gabriel Spiteri 05.05.2011 в 10:15
  • Я думаю, что важно четко указать, что этот ответ также вернет файлы, которые были изменены в течение вашего таймфрейма, но добавлены раньше. Поэтому вы должны быть осторожны. –  jedwards 05.05.2011 в 12:22
  • jedwards, прочитайте первый комментарий. OP может гарантировать, что для его файлов время модификации - время создания. –  Ryan Thompson 05.05.2011 в 20:03
1

Я неправильно понял ваш вопрос. В зависимости от того, какую файловую систему вы используете, она может хранить или не хранить время создания.

Я понимаю, что ext2 / 3/4 не сохраняет время создания, но изменено, изменено (состояние, которое немного отличается) и время доступа.

Fat32, с другой стороны, содержит временные метки создания IIRC.

Если вы используете файловую систему ext, у вас есть два варианта:

1. Выберите для поиска все файлы, которые были изменены между двумя датами (которые будут включать созданные файлы, а также файлы, которые были только что отредактированы). Вы можете сделать это, используя найти .

2.Создайте скрипт / cronjob, который будет документировать содержимое вашей файловой системы через некоторый интервал, например

find / > filesystem.$(date +%s).log

, а затем запустите diff, чтобы увидеть, что было добавлено. Это, конечно же, помешало бы вам смотреть назад вовремя, прежде чем вы начнете делать эти журналы.

    
ответ дан jedwards 05.05.2011 в 08:56
0

Вы можете попробовать один из них:

find -newerct "1 Aug 2013" ! -newerct "1 Sep 2013" -ls

find . -mtime $(date +%s -d"Jan 1, 2013 23:59:59") -mtime $(date +%s -d"Jan 2, 2016 23:59:59")

find /media/WD/backup/osool/olddata/ -newermt 20120101T1200 -not -newermt 20130101T1400

find . -mtime +1 -mtime -3
find . -mtime +1 -mtime -3 > files_from_yesterday.txt 2>&1
find . -mtime +1 -mtime -3 -ls > files_from_yesterday.txt 2>&1

touch -t 200506011200 first
touch -t 200507121200 last
find / -newer first ! -newer last

#!/bin/bash
for i in 'find Your_Mail_Dir/ -newermt "2011-01-01" ! -newermt "2011-12-31"'; do
    mv $i /moved_emails_dir/

Надеюсь, что это поможет.

    
ответ дан user6020250 21.04.2016 в 16:40
  • Пожалуйста, предоставьте некоторое объяснение в дополнение к коду. –  Jan 21.04.2016 в 17:06