Làm cách nào để tìm các tệp được tạo trong giờ cuối cùng trong unix


134

Làm cách nào để tìm các tệp được tạo trong giờ cuối cùng trong unix

Câu trả lời:


212

Nếu thư mục tìm kiếm srch_dirthì hoặc

$ find srch_dir -cmin -60 # change time

hoặc là

$ find srch_dir -mmin -60 # modification time

hoặc là

$ find srch_dir -amin -60 # access time

hiển thị các tập tin được tạo, sửa đổi hoặc truy cập trong giờ qua.

sửa: ctime là để thay đổi thời gian nút (mặc dù không chắc chắn, xin vui lòng sửa cho tôi)


2
Điều này thật tuyệt vời và tất cả, nhưng những lá cờ này không tồn tại trên Solaris findmà tôi đang sử dụng. OP cho biết Unix và tôi nghĩ đây chỉ là Linux.
nhảy lên

11
Bí quyết là sử dụng các giá trị thời gian tiêu cực ! Nó không quá rõ ràng trong trang người đàn ông.
sphakka 11/03/2015

Câu trả lời của @jiggy Ayush đưa ra một bản hack (dựa trên -newer) nên hoạt động trên Solaris.
David Moles

3
-cmin KHÔNG phải là thời gian tạo mà là thay đổi thời gian! chỉ cần xóa .config dir của tôi trong quá trình chạy thử, nó không thay đổi trong vòng X phút trước và khi tôi thực hiện thì đó là .... vì vậy có thể chỉnh sửa điều này ...!
Badmaster

Tôi vẫn nghĩ rằng bình luận ví dụ đầu tiên cần sửa đổi. "thay đổi thời gian" là trạng thái tệp chứ không phải dữ liệu tệp
KC Baltz

24

Các hệ thống tập tin UNIX (nói chung) không lưu trữ thời gian tạo. Thay vào đó, chỉ có thời gian truy cập, thời gian sửa đổi (dữ liệu) và thời gian thay đổi (inode).

Điều đó đang được nói, find-atime -mtime -ctimevị ngữ:

$ man 1 tìm
...
-tần   n
        Chính sẽ đánh giá là đúng nếu thời điểm thay đổi cuối cùng của
        thông tin trạng thái tệp được trừ từ thời gian khởi tạo,
        chia cho 86400 (với bất kỳ phần còn lại bị loại bỏ), là n.
...

Do đó, find -ctime 0tìm thấy mọi thứ mà inode đã thay đổi (ví dụ bao gồm tạo tệp, nhưng cũng tính số lượng liên kết và quyền và thay đổi kích thước tệp) chưa đầy một giờ trước.


86400 giây là một ngày , không phải một giờ. Do đó, đối số để -ctimevv là theo đơn vị ngày chứ không phải giờ.
Gaylon

12

kiểm tra liên kết này và sau đó giúp mình

mã cơ bản là

#create a temp. file
echo "hi " >  t.tmp
# set the file time to 2 hours ago
touch -t 200405121120  t.tmp 
# then check for files
find /admin//dump -type f  -newer t.tmp -print -exec ls -lt {} \; | pg

Cảm ơn, tuy nhiên điều này sẽ chỉ tìm kiếm t.tmp. Điều gì xảy ra nếu tôi muốn tìm tất cả các tệp được tạo trong giờ qua.
Ankur

2
Ankur: nó sẽ tạo một tệp tạm thời t.tmp và đặt thời gian tạo của nó thành 2 giờ trước ... sau đó nó sẽ tìm kiếm trong thư mục hiện tại tất cả các tệp được tạo sau t.tmp tức là trong 2 giờ qua ..
ayush

4
mát mẻ!! Mặc dù lệnh đầu tiên là không cần thiết. touchtạo tập tin nếu nó chưa tồn tại
Amir Uval


3
sudo find / -Bmin 60

Từ mantrang:

-Bmin n

Đúng nếu chênh lệch giữa thời gian tạo inode của tệp và thời gian findđược bắt đầu, được làm tròn đến phút đầy đủ tiếp theo, là n phút.

Rõ ràng, bạn có thể muốn thiết lập một chút khác nhau, nhưng chính này có vẻ là giải pháp tốt nhất để tìm kiếm bất kỳ tệp nào được tạo trong N phút cuối .


find (GNU findutils) 4.6.0không có -Bvị ngữ
blockloop

0

Kiểm tra liên kết này để biết thêm chi tiết.

Để tìm các tệp được tạo trong một giờ qua trong thư mục hiện tại, bạn có thể sử dụng -amin

tìm thấy . -amin -60 -type f

Điều này sẽ tìm thấy các tập tin được tạo ra trong 1 giờ qua.

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.