Son değiştirilen tüm dosyaları listeleme (özyinelemeli)


21

Bu nedenle, lsson yedi günde değiştirilen tüm dosyaları ( örneğin aracılığıyla ) görüntülemek istiyorum . Benim docroot-klasörümdeysem, "daha derine" bakmalı.

Örneğin:

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

Bu nedenle, ls(veya ne uygunsa) çıkmalı myfile1ve (mümkünse) MySub/sub1.

Bu tek komutla yapılabilir mi?

Yanıtlar:


39

Tabii ki. Bulunduğunuz dizinden:

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

Yeniden yönlendirme ekleyin (aka > results.txtonları bu dosyaya kaydetmek için).

  • type f dizinleri değil sadece dosyaları yapar
  • mtime -7 7 gün önce şu ana kadar (+7 '7 günden daha eski olacak)
  • ve sonra lsuzun bir liste göstermesi için beslenir

Siz de rol oynayabilirsiniz 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 {} \; 

Uzun listede (1) veya kısa listede (2) bulunan dosyalar arasında dizinleri olan bir ağaç benzeri yöntem gösterecektir.


4
findvardır lssadece yapabileceği böylece seçeneğifind . -type f -mtime -7 -ls
heemayl

Tabii ama bu biraz daha genel kılar (Bu yöntemi -remove- 'a ihtiyacım olan dosyaları bulmak için kullanırım ve bunu yapmak için bu komutu değiştirebilirim :))
Rinzwind

3
Ayrıca, daha verimli bir şekilde find ... -exec ls -l {} +yürütmek ls -l, çoklu parametrelerle daha az defa kullanmak daha uygundur . Bu findPOSIX tarafından belirtilen standart bir seçenektir .
pabouk

5

İle zsh:

ls -l **/*(.m-7)
  • **/* mevcut dizinden başlayarak tekrarlayan dosyaları arayacaktır.

  • (.m-7)glob niteleyicisi ., normal dosyayı m-7belirtir , son 7 gün içinde değiştirilen dosyaları gösterir.


2

Aşağıdaki komut Mac OSX'te bir rüya görüyor - belki de ubuntu'da…

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

Bu, geçerli dizin ağacında son 7 günde değiştirilen dosyaları bulur, ilk önce en yeni sırada yer alan değişiklik tarihini + saatini ve yolunu görüntüler.

Örnek çıktı:

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 kullanıcılarından gelen herhangi bir geri bildirim için minnettar olurum.


Mac'te benim için iyi çalışan tek çözüm. Teşekkürler!
artnikpro

Hoşgeldin @artnikpro!
MrWatson

1

Tam olarak ne istendi ... ama hatırlaması çok daha kolay ...

ls -alRt docroot

veya

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

0

7 gün 60 saniye * 60 dakika * 24 saat * 7 gün = 604800 saniye

Geçerli tarihi saniyeler içinde bulun (Unix çağlanma zamanı):

$ date +%s
1448876323

7 günü saniyeler içinde çıkarın:

expr $(date +%s) - 604800
1448271548

Şimdi stat"isim + saniye cinsinden zaman" biçimindeki tüm dosyalar için komut alın ve istatistikleri yazdırın awkve değişiklik zamanı hesapladığımız tarihin üzerinde olan dosyaları kesmek için kullanın

$ 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

Özellikle ilgi çeken son 3 dosya, çünkü 7 günden daha az bir süre önce üzerinde çalıştığımı biliyorum. Böylece çalıştığını biliyorum


2
awk '$2 > 1448271265 {print $0}'Sizin yerine diret diyebilirsiniz awk '$2 > 1448271265'. Gerçek bir durumda, awk geçerli satırı varsayılan eylem olarak yazdırır.
fedorqui
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.