Liệt kê tất cả các tệp đã thay đổi gần đây (đệ quy)


20

Vì vậy, tôi muốn hiển thị ( lsví dụ thông qua ) tất cả các tệp đã được thay đổi trong bảy ngày qua. Nếu tôi đang ở trong thư mục docroot của mình, nó sẽ có thể nhìn "sâu hơn".

Ví dụ:

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

Vì vậy, ls(hoặc bất cứ điều gì phù hợp) nên xuất ra myfile1và (nếu có thể) MySub/sub1.

Điều này có thể thực hiện được với một lệnh không?

Câu trả lời:


38

Tất nhiên. Từ thư mục bạn đang làm:

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

Thêm một chuyển hướng đến nó (còn gọi là > results.txtlưu trữ chúng vào tập tin đó).

  • type f không chỉ tập tin và không thư mục
  • mtime -7 hiện 7 ngày trước cho đến nay (+7 sẽ là 'cũ hơn 7 ngày')
  • và sau đó nó cung cấp cho nó lsđể hiển thị một danh sách dài

Bạn có thể chơi với ls -l một phần:

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

sẽ hiển thị một phương thức giống như cây với các thư mục ở giữa các tệp trong danh sách dài (1) hoặc danh sách ngắn (2).


4
findlstùy chọn để bạn có thể làmfind . -type f -mtime -7 -ls
heemayl

Chắc chắn nhưng điều này làm cho nó chung chung hơn một chút (Tôi sử dụng phương pháp này để tìm các tệp tôi cần -remove- và có thể thay đổi lệnh đó để thực hiện :))
Rinzwind

3
Ngoài ra, nó phù hợp hơn để sử dụng find ... -exec ls -l {} +mà thực thi ls -lhiệu quả hơn nhiều - ít lần hơn với nhiều tham số. Đây là một tùy chọn tiêu chuẩn findđược chỉ định bởi POSIX.
pabouk

5

Với zsh:

ls -l **/*(.m-7)
  • **/* sẽ tìm các tệp đệ quy bắt đầu từ thư mục hiện tại

  • (.m-7)là vòng loại toàn cầu nơi .chỉ ra tệp thông thường, m-7cho biết các tệp đã được sửa đổi trong vòng 7 ngày qua


2

Lệnh sau hoạt động như một giấc mơ trên Mac OSX - cũng có thể trên ub Ubuntu,

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

Điều này tìm thấy các tệp trong cây thư mục hiện tại đã được sửa đổi trong 7 ngày qua, đưa ra ngày sửa đổi + thời gian và đường dẫn, được sắp xếp mới nhất trước.

Ví dụ đầu ra:

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

Tôi rất biết ơn bất kỳ phản hồi nào từ người dùng Ubuntu.


Giải pháp duy nhất hiệu quả với tôi trên Mac. Cảm ơn!
artnikpro

Chào mừng bạn @artnikpro!
MrWatson

1

Không chính xác những gì được yêu cầu ... nhưng dễ nhớ hơn nhiều ...

ls -alRt docroot

hoặc là

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

0

7 ngày đó là 60 giây * 60 phút * 24 giờ * 7 ngày = 604800 giây

Tìm hiểu ngày hiện tại tính bằng giây (thời gian kỷ nguyên Unix):

$ date +%s
1448876323

Trừ 7 ngày trong vài giây:

expr $(date +%s) - 604800
1448271548

Bây giờ, lấy statlệnh và in số liệu thống kê cho tất cả các tệp ở định dạng "tên + thời gian tính bằng giây" và sử dụng awkđể cắt bỏ các tệp có thời gian sửa đổi lớn hơn ngày mà chúng tôi đã tính

$ 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

Đặc biệt quan tâm là 3 tập tin cuối cùng, bởi vì tôi biết tôi đã làm việc chúng ít hơn 7 ngày trước. Vì vậy, tôi biết nó hoạt động


2
Lưu ý rằng thay vì awk '$2 > 1448271265 {print $0}'bạn có thể nói awk '$2 > 1448271265'. Trên một điều kiện thực tế, awk in dòng hiện tại như một hành động mặc định.
fedorqui
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.