Daftar semua file yang baru saja diubah (rekursif)


20

Jadi, saya ingin menampilkan ( lsmisalnya) semua file, yang diubah dalam tujuh hari terakhir. Jika saya berada di folder-docroot saya, seharusnya bisa terlihat "lebih dalam".

Sebagai contoh:

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

Jadi, ls(atau apa pun yang cocok) harus di-output myfile1dan (jika mungkin) MySub/sub1.

Apakah ini bisa dilakukan dengan satu perintah?

Jawaban:


38

Tentu saja. Dari direktori yang Anda lakukan:

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

Tambahkan pengalihan untuk itu (alias > results.txtuntuk menyimpannya ke file itu).

  • type f tidak hanya file dan bukan direktori
  • mtime -7 lakukan 7 hari yang lalu hingga sekarang (+7 akan 'lebih tua dari 7 hari')
  • dan kemudian memasukkannya ke lsuntuk menampilkan daftar panjang

Anda dapat bermain dengan ls -lbagian itu juga:

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

akan menampilkan metode seperti pohon dengan direktori di antara file dalam daftar panjang (1) atau daftar pendek (2).


4
findpunya lspilihan sehingga Anda bisa melakukannyafind . -type f -mtime -7 -ls
heemayl

Tentu tetapi ini membuatnya sedikit lebih umum (saya menggunakan metode ini untuk menemukan file yang saya perlu -hapus- dan dapat mengubah perintah itu untuk melakukannya :))
Rinzwind

3
Juga lebih tepat untuk menggunakan find ... -exec ls -l {} +yang mengeksekusi ls -ljauh lebih efisien - lebih sedikit kali dengan beberapa parameter. Ini adalah opsi standar yang findditentukan oleh POSIX.
pabouk

5

Dengan zsh:

ls -l **/*(.m-7)
  • **/* akan mencari file secara rekursif mulai dari direktori saat ini

  • (.m-7)adalah glob qualifier di mana .menunjukkan file biasa, m-7menunjukkan file yang telah diubah dalam 7 hari terakhir


2

Perintah berikut berfungsi di Mac OSX - mungkin juga di ubuntu ...

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

Ini menemukan file dalam pohon direktori saat ini yang telah dimodifikasi dalam 7 hari terakhir, menampilkan tanggal modifikasi + waktu dan jalur, disortir terbaru terlebih dahulu.

Contoh output:

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

Saya akan berterima kasih atas umpan balik dari pengguna ubuntu.


Satu-satunya solusi yang bekerja dengan baik untuk saya di Mac. Terima kasih!
artnikpro

Selamat datang di @artnikpro!
MrWatson

1

Tidak persis apa yang diminta ... tetapi lebih mudah diingat ...

ls -alRt docroot

atau

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

0

7 hari yaitu 60 detik * 60 menit * 24 jam * 7 hari = 604800 detik

Cari tahu tanggal saat ini dalam detik (Unix epoch time):

$ date +%s
1448876323

Kurangi 7 hari dalam hitungan detik:

expr $(date +%s) - 604800
1448271548

Sekarang ambil statperintah dan cetak statistik untuk semua file dalam format "nama + waktu dalam detik" dan gunakan awkuntuk memotong file-file yang waktu modifikasi lebih besar dari tanggal yang kami hitung

$ 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

Yang paling menarik adalah 3 file terakhir, karena saya tahu saya mengerjakannya kurang dari 7 hari yang lalu. Jadi saya tahu itu berhasil


2
Perhatikan bahwa alih-alih awk '$2 > 1448271265 {print $0}'Anda bisa langsung mengatakannya awk '$2 > 1448271265'. Pada kondisi sebenarnya, awk mencetak baris saat ini sebagai tindakan default.
fedorqui
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.