Find all new files linux

Linux find command, find 10 latest files recursively regardless of time span

This output is OK, doesn’t work good if I put wider time span. (notice I use -ctime and not -mtime because some uploaded files are modified few years ago) Problem is that files can be uploaded once a month, or once in a year, and I still need to get 10 latest files, regardless of time span. If it can’t be done, does tail only limit output, or somehow just fetches number specified without huge performance impact on large number of files. By using command from one answer on SO, I was able to get the files but some files were missing.

find . -type f -printf '%T@ %p\n' | sort -n | tail -10 | cut -f2- -d" " 
./Mobilni Telefoni/11. Samsung/1. FLASH FILES/1. SRPSKI HRVATSKI JEZICI/E/E2330/E2330_OXFKE2.rar ./Mobilni Telefoni/11. Samsung/1. FLASH FILES/1. SRPSKI HRVATSKI JEZICI/E/E2330/FlashTool_E2_R6.zip ./Mobilni Telefoni/11. Samsung/1. FLASH FILES/1. SRPSKI HRVATSKI JEZICI/E/E210/E210_XFGH2.rar ./Mobilni Telefoni/05. iPhone/07. iFaith/iFaith-v1.4.1_windows-final.zip ./Mobilni Telefoni/05. iPhone/09. iPhone Browser/SetupiPhoneBrowser.1.93.exe ./Mobilni Telefoni/05. iPhone/10. iPhone_PC_Suite/iPhone_PC_Suite_Eng_v0.2.1.rar ./Mobilni Telefoni/05. iPhone/10. iPhone_PC_Suite/iPhone_PC_Suite_Ok.rar ./test ./Mobilni Telefoni/11. Samsung/1. FLASH FILES/1. SRPSKI HRVATSKI JEZICI/E/E2152/E2152_XXJH4_OXFJI2.zip.filepart ./GPS Navigacije/01. Garmin/03. Garmin Other/test.txt 

File garmin_kgen_15.exe is missing because it was created in 2008, but it was uploaded in last 24 hours.

Источник

Как найти новые файлы в Linux

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

Операционная система Linux, как всегда, радует множеством способов для решения этой задачи. В этой инструкции мы рассмотрим некоторые из них.

Поиск новых файлов в Linux

Способ 1. Утилита find

Самый распространенный способ найти новые файлы в linux — это воспользоваться утилитой find. В зависимости от ситуации и потребностей утилите передаются различные параметры, можно искать файлы в конкретном диапазоне дат, новее определенной даты или новее определенного файла. Рассмотрим все подробнее.

Можно вывести все файлы в директории и поддиректориях, а затем отсортировать по дате создания:

find /etc -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r

Но это слишком громоздко, да и не нужны нам все файлы, нам надо только новые. Следующей командой можно получить все файлы, измененные или созданные за последние 60 минут:

Читайте также:  Linux stop process by port

Чтобы найти последние измененные файлы linux за последних два дня используете параметр mtime:

Если нужно не углубляться в подкаталоги ниже третьего уровня, используйте опцию maxdepth:

find /etc -maxdepth 3 -mtime -2 -type f

Также можно задать диапазон времени, в котором был создан или изменен файл. Например, чтобы посмотреть новые файлы linux за последние семь дней, но исключая последние три дня, наберите:

find /etc -type f -mtime -7 ! -mtime -3

Все эти команды выводят только путь к файлу, но также можно посмотреть атрибуты с помощью опции —exec. Выведем подробные атрибуты новых файлов, выполнив для каждого из них утилиту ls:

find /etc -type f -mmin -120 -exec ls -al <> \;

Предыдущая команда немного сложна и запутана, намного нагляднее для этого использовать утилиту xargs:

find /etc -type f -mmin -120 | xargs ls -l

Утилита find также позволяет найти файлы новее определенного файла. Например, создадим эталонный файл:

И найдем все файлы в корневом каталоге, созданные после его него:

find / -type f -newer /tmp/test

Способ 2. ls

Этот способ намного проще первого, но за простоту мы платим гибкостью. Команда ls тоже умеет сортировать файлы в директории по дате создания. Просто выполните:

В данном случае самый новый файл будет в самом низу. Если файлов очень много можно обрезать вывод с помощью tail:

Выводы

Возможно, это еще не все способы найти новые файлы в Linux, но тут уже есть из чего выбрать лучшее решение для конкретной ситуации. Как показано в этой статье, базовые команды поиска find и ls могут получить еще большую гибкость в объединении с утилитами сортировки sort, а также фильтрации tail и grep.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Recursively find all files newer than a given time

How can I list all files newer than a given time? I’m looking for a one-liner that I can run in Bash with standard Linux utilities. I know how to list all files newer than a given file ( find . -newer FILE ), but in my case I have a Unix timestamp (e.g. 1312604568 ) to compare them to, instead of a file.

As a computer programmer, I can say with confidence that using find to locate files based on various criteria is definitely part of my workflow. As such, this would fall into the category of «software tools primarily used by programmers» and should be reopened. Pretty please.

9 Answers 9

You can find every file what is created/modified in the last day, use this example:

find /directory -newermt $(date +%Y-%m-%d -d '1 day ago') -type f -print 

for finding everything in the last week, use ‘1 week ago’ or ‘7 day ago’ anything you want

Читайте также:  Linux rdp server centos

On OSX Mountain Lion (man page indicates 2007 BSD?), it appears that date requires the format to be at the end, and the -d option is in fact the -v option, so the above command looks like find /directory -newermt $(date -v-1d +%Y-%m-%d) -type f -print

by testing I find that -newermt actually means ‘same or newer’ which is not what is suggested by the word ‘newer’: echo hello >./foo.txt; find -maxdepth 1 -name foo.txt -newermt @$(stat -c%Y foo.txt) returns ./foo.txt . Whereas echo hello >./foo.txt; find -maxdepth 1 -name foo.txt -newermt @$(( $(stat -c%Y foo.txt)+1 )) does not return anything. This is with find from GNU findutils 4.4.2.

In fact, you don’t need the $(date . ) part. -newerXt accepts anything that comes after the -d in a date command, so -newermt ‘1 day ago’ works nicely.

Maybe someone can use it. Find all files which were modified within a certain time frame recursively, just run:

find . -type f -newermt "2013-06-01" \! -newermt "2013-06-20" 

the first date is included, the second date is excluded, so that commands like

find . -type f -newermt "2013-06-20" \! -newermt "2013-06-20" 

Also remember you can redirect output to a file for later usage, like find . -type f -newermt «2013-06-01» \! -newermt «2013-06-20» > output.txt

Assuming a modern release, find -newermt is powerful:

find -newermt '10 minutes ago' ## other units work too, see `Date input formats` 

or, if you want to specify a time_t (seconds since epoch):

For reference, -newermt is not directly listed in the man page for find. Instead, it is shown as -newerXY , where XY are placeholders for mt . Other replacements are legal, but not applicable for this solution.

Time specifications are interpreted as for the argument to the -d option of GNU date.

So the following are equivalent to the initial example:

find -newermt "$(date '+%Y-%m-%d %H:%M:%S' -d '10 minutes ago')" ## long form using 'date' find -newermt "@$(date +%s -d '10 minutes ago')" ## short form using 'date' -- notice '@' 

The date -d (and find -newermt ) arguments are quite flexible, but the documentation is obscure. Here’s one source that seems to be on point: Date input formats

Источник

How do I find all the files that were created today in Unix/Linux?

On my Fedora 10 system, with findutils-4.4.0-1.fc10.i386 :

find -daystart -ctime 0 -print 

The -daystart flag tells it to calculate from the start of today instead of from 24 hours ago.

Note however that this will actually list files created or modified in the last day. find has no options that look at the true creation date of the file.

Читайте также:  Android ndk linux toolchain

That is almost perfect for me, clean and concise, just missing the «-f» flag to get only files (without current dir)

(@ephemient: Well, with *nix, the ctime of an inode was colloquially known as the creation time, even if the specification said (inode) change time (keeping neither changes to file names nor contents, but meta data like ownership, permissions,…. sleuthkit on «MAC» meaning))

find . -mtime -1 -type f -print 

Don’t use backticks; don’t use pwd except for printing (that’s the p in pwd ) the working directory. Use . to reference current directory.

this answer is incorrect — this displays the files created in the last 24 hours, not the files created today

@G.Lebret -ctime is the time the file’s status was last changed. Unix doesn’t store file creation time, last modified time is obviously equivalent to creation time if nothing modified the file after it was created.

To find all files that are modified today only (since start of day only, i.e. 12 am), in current directory and its sub-directories:

touch -t `date +%m%d0000` /tmp/$$ find . -type f -newer /tmp/$$ rm /tmp/$$ 

I use this with some frequency:

$ ls -altrh --time-style=+%D | grep $(date +%D) 

After going through many posts I found the best one that really works

find $file_path -type f -name "*.txt" -mtime -1 -printf "%f\n" 

This prints only the file name like abc.txt not the /path/tofolder/abc.txt

Also also play around or customize with -mtime -1

This worked for me. Lists the files created on May 30 in the current directory.

Use ls or find to have all the files that were created today.

Using ls : ls -ltr | grep «$(date ‘+%b %e’)»

Using find : cd $YOUR_DIRECTORY ; find . -ls 2>/dev/null| grep «$(date ‘+%b %e’)»

 find ./ -maxdepth 1 -type f -execdir basename '<>' ';' | grep `date +'%Y%m%d'` 

Welcome to Stack Overflow. Code dumps without any explanation are rarely helpful. Stack Overflow is about learning, not providing snippets to blindly copy and paste. Please edit your question and explain how it answers the specific question being asked. See How to Answer. This is especially important when answering old questions (this one is over 12 years old) with existing answers.

You can use find and ls to accomplish with this:

find . -type f -exec ls -l <> \; | egrep "Aug 26"; 

It will find all files in this directory, display useful informations ( -l ) and filter the lines with some date you want. It may be a little bit slow, but still useful in some cases.

Источник

Оцените статью
Adblock
detector