Список усіх нещодавно змінених файлів (рекурсивний)


21

Отже, я хочу показати (через 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.

Це можна виконати за допомогою однієї команди?

Відповіді:


39

Звичайно. З каталогу, який ви перебуваєте, виконайте:

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).


4
findє lsваріант, щоб ви могли просто зробитиfind . -type f -mtime -7 -ls
heemayl

Звичайно, але це робить його трохи більш загальним (я використовую цей метод, щоб знайти файли, які мені потрібно -remove-, і я можу змінити цю команду, щоб це зробити :))
Rinzwind

3
Крім того, більш доцільним є використання, find ... -exec ls -l {} +яке виконує ls -lнабагато ефективніше - менше разів з кількома параметрами. Це стандартний варіант, findвизначений POSIX.
пабук

5

З zsh:

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

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


2

Наступна команда працює мрією на Mac OSX - можливо, також і на ubuntu…

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

Буду вдячний за будь-які відгуки користувачів ubuntu.


Єдине рішення, яке добре працювало для мене на Mac. Спасибі!
artnikpro

Ваше вітання @artnikpro!
Містер Уотсон

1

Не зовсім те, що просили ... але набагато простіше запам'ятати ...

ls -alRt docroot

або

ls -alRt /path/to/top/level/directory

0

7 днів, це 60 секунд * 60 хвилин * 24 години * 7 днів = 604800 секунд

Дізнайтеся поточну дату в секундах (час 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

Особливо цікаві останні три файли, тому що я знаю, що працював над ними менше, ніж 7 днів тому. Таким чином я знаю, що це працює


2
Зауважте, що замість awk '$2 > 1448271265 {print $0}'вас можна прямо сказати awk '$2 > 1448271265'. У дійсній умові awk друкує поточний рядок як дію за замовчуванням.
fedorqui
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.