Перечислите все недавно измененные (рекурсивные) файлы

Так, я хочу отобразиться (через ls например) все файлы, которые были изменены за прошлые семь дней. Если я нахожусь в своей docroot-папке, она должна смочь выглядеть "глубже".

Например:

File        Last changed
docroot
|- myfile1  30.11.2015
|- myfile2  10.11.2015
|- MySub
   |-sub1   30.11.2015
   |-sub2   10.11.2015

Так, ls (или безотносительно соответствий), должен произвести myfile1 и (если возможный) MySub/sub1.

Действительно ли это выполнимо с одной командой?

20
задан 30 November 2015 в 02:25

5 ответов

Конечно. Из каталога Вы находитесь в, сделайте:

find . -type f -mtime -7 -exec ls -l {} \; 

Добавляют перенаправление к нему (иначе > results.txt для хранения их в тот файл).

  • type f делает только файлы, и не каталоги
  • mtime -7 делает 7 дней назад до сих пор (+7, было бы 'более старым, чем 7 дней')
  • , и это тогда подает его к ls для показа длинного списка
<час>

, можно играть с ls -l часть также:

find . -type f -mtime -7 -exec ls -Rl --time-style=long-iso {} \; 
find . -type f -mtime -7 -exec ls -R  --time-style=long-iso {} \; 

покажет дерево как метод с каталогами, промежуточными файлы в длинном списке (1) или коротком списке (2).

38
ответ дан 23 November 2019 в 01:48

С zsh:

ls -l **/*(.m-7)
  • **/* будет искать файлы, рекурсивно начинающие с текущего каталога

  • (.m-7), спецификатор шарика, где . указывает, что регулярный файл, m-7 указывает на файлы, которые были изменены в течение прошлых 7 дней

5
ответ дан 23 November 2019 в 01:48

Не точно, относительно чего попросили..., но намного легче помнить...

ls -alRt docroot

или

ls -alRt /path/to/top/level/directory
1
ответ дан 23 November 2019 в 01:48

7 дней это - 60 seconds*60minutes*24hours*7days = 604 800 секунд

Узнайте текущую дату в секундах (Время эпохи Unix):

$ date +%s
1448876323

Вычтите эти 7 дней в секундах:

expr $(date +%s) - 604800
1448271548

Теперь возьмите stat команда и статистика печати для всех файлов в формате "называют + время в секундах" и использовании awk обрезать от тех файлов, время изменения которых больше, что та дата мы вычислили

$ stat --printf="%n %Y\n" $HOME/* | awk '$2 > 1448271265 {print $0}'
/home/xieerqi/1448428697574.png 1448429613
/home/xieerqi/1448763343273.png 1448763478
/home/xieerqi/1510DRIVE 1448352453
/home/xieerqi/addRemoveDistribution 1448666843
/home/xieerqi/add-update.awk 1448716356
/home/xieerqi/add-update.sh 1448625092

Особенно интереса являются последними 3 файла, потому что я знаю, что работал их над меньше этим 7 дней назад. Таким образом я знаю, что это работает

0
ответ дан 23 November 2019 в 01:48

Следующая команда работает мечта над MAC OSX - возможно, также на человечности …

find . -type f -mtime -7 -exec stat -lt "%Y-%m-%d %H:%M:%S" {} \; | cut -d\  -f6- | sort -r

Это находит файлы в дереве текущего каталога, которые были изменены за прошлые 7 дней, производит дату модификации + время и путь, отсортированный новейший сначала.

Пример произвел:

2018-02-21 22:06:30 ./fmxmlsnippet.xml
2018-02-19 12:56:01 ./diff.html
2018-02-19 12:44:37 ./temp/iDDR/XMSC_fmxmlsnippet.xml
2018-02-18 22:04:05 ./temp/iDDR/XMFD_fmxmlsnippet.xml
2018-02-15 10:18:27 ./xml/iDDR/XML2_fmxmlsnippet.xml
2018-02-15 10:13:29 ./xsl/fmxmlsnippet/XML2_fmCM_AnalyseLayout.xsl
2018-02-15 10:11:36 ./xsl/.DS_Store
2018-02-15 10:10:51 ./xsl/_inc/inc.XML2_fmCM_ReportReferencesToExternalFiles.xsl
2018-02-15 10:10:09 ./xsl/_inc/.DS_Store
2018-02-15 10:07:35 ./xsl/fmxmlsnippet/XML2_fmCM_AnalyseLayout-NoAnchors.xsl
2018-02-15 10:07:35 ./xsl/_inc/inc.XML2_fmCM_AnalyseLayout.xsl

Я был бы благодарен из любой обратной связи от пользователей человечности.

2
ответ дан 23 November 2019 в 01:48

Другие вопросы по тегам:

Похожие вопросы: