Tôi biết cách liệt kê tất cả các thư mục con và tệp trong cây thư mục. Nhưng tôi đang tìm cách liệt kê tất cả các tệp mới được tạo, sửa đổi và (nếu có thể) các tệp đã xóa trong tất cả các thư mục trong cây thư mục bắt đầu từ thư mục gốc.Mã Python để tìm tất cả các tệp mới được tạo, sửa đổi và xóa trong tất cả các thư mục/thư mục con bắt đầu từ/directory
Trả lời
Bạn có thể tìm thấy tất cả các file tạo hoặc sửa đổi trong vòng nửa giờ bằng cách nhìn vào "mtime" của mỗi tập tin:
import os
import datetime as dt
now = dt.datetime.now()
ago = now-dt.timedelta(minutes=30)
for root, dirs,files in os.walk('.'):
for fname in files:
path = os.path.join(root, fname)
st = os.stat(path)
mtime = dt.datetime.fromtimestamp(st.st_mtime)
if mtime > ago:
print('%s modified %s'%(path, mtime))
Để tạo một danh sách các tập tin đã xóa, bạn cũng phải có danh sách các tập tin cách đây 30 phút.
Cách thay thế mạnh mẽ hơn là sử dụng hệ thống kiểm soát sửa đổi như git
. Thực hiện cam kết của tất cả các tệp trong thư mục giống như tạo ảnh chụp nhanh. Sau đó, lệnh
git status -s
sẽ liệt kê tất cả các tệp đã thay đổi kể từ lần commit cuối cùng. Thao tác này sẽ liệt kê các tệp đã bị xóa.
Chạy mã ở trên, cung cấp lỗi sau: Traceback (cuộc gọi gần đây nhất cuối cùng): Tệp "tsck.py", dòng 13, trong? in ('{p} sửa đổi {m}' định dạng (p = path, m = mtime)) AttributeError: đối tượng 'str' không có thuộc tính 'format' – nsh
Có quá chậm, chúng ta có thể tìm cách khác, kích hoạt hệ thống để đăng nhập các tệp mới được tạo và sau đó phân tích tệp nhật ký. hoặc cách tốt hơn là thêm trình kích hoạt cho trợ giúp nhập nhật ký mới. – pylover
@nsh: 'str.format' được giới thiệu trong Python2.6. Đối với phiên bản cũ hơn, bạn có thể sử dụng định dạng chuỗi '% s'. Tôi sẽ chỉnh sửa bài đăng của mình để thể hiện ý tôi. – unutbu
Hãy xem "người đàn ông tìm thấy"
tạo ra một tập tin tạm thời để so sánh
dụ:
find/-type f -newerB tempFile
một số phần của người đàn ông tìm
-newerXY reference
Compares the timestamp of the current file with reference. The reference argument is normally the name of a file (and one
of its timestamps is used for the comparison) but it may also be a string describing an absolute time. X and Y are place‐
holders for other letters, and these letters select which time belonging to how reference is used for the comparison.
a The access time of the file reference
B The birth time of the file reference
c The inode status change time of reference
m The modification time of the file reference
t reference is interpreted directly as a time
from tempfile import mkstemp
import shutil
import os
import datetime as dt
import sys
# gets the time frame we are going to look back and builds a placeholder list to passover the info from our mtime to slay
now=dt.datetime.now()
ago=now-dt.timedelta(minutes=480)
passover=[]
# the '.' is the directory we want to look in leave it to '.' if you want to search the directory the file currently resides in
for root,dirs,files in os.walk('.'):
for fname in files:
path=os.path.join(root,fname)
st=os.stat(path)
mtime=dt.datetime.fromtimestamp(st.st_mtime)
if mtime>ago:
passover.append(path)
def slay(file_path, pattern, subst):
#Create temp file
fh, abs_path = mkstemp()
with open(abs_path,'w') as new_file:
with open(file_path) as old_file:
for line in old_file:
new_file.write(line.replace(pattern, subst))
old_file.close()
#Remove original file
os.remove(file_path)
#Move new file
try:
shutil.move(abs_path, file_path)
except WindowsError:
pass
#we pass the passover list to the slay command in a for loop in order to do muiltple replaces in those files.
for i in passover:
slay(i,"String1","String2")
Tôi xây dựng này để xem xét một thư mục và chọn các tập tin sửa đổi trong thời gian cuối cùng của thời gian và sau đó thay thế văn bản trong những tập tin. Kịch bản này không được đặt xung quanh và tôi đã phải mảnh nó lại với nhau từ câu trả lời ở trên vì vậy tôi figured một người nào khác có thể đi tìm kiếm nó. – Powerboy2
Vui lòng chỉnh sửa câu trả lời của bạn với thông tin này. Ngoài ra, một câu trả lời hoàn chỉnh nên có một vài dòng mô tả những gì nó làm. Vui lòng đọc bài viết sau: [Làm cách nào để viết câu trả lời hay?] (Http://stackoverflow.com/help/how-to-answer) – Mariano
- 1. Sử dụng tìm để xóa tất cả các thư mục con (và các tệp của họ)
- 2. Tìm tất cả các chuỗi trong các tệp mã python
- 3. Cách gzip tất cả các tệp trong tất cả các thư mục con trong bash
- 4. CoffeeScript - biên dịch tất cả các tệp .coffee trong thư mục hiện tại và tất cả các thư mục con
- 5. Xóa thư mục và tất cả các tệp/thư mục con
- 6. cách xóa tất cả các tệp trừ ba tệp mới nhất trong một thư mục
- 7. Buộc xóa tất cả các tệp khỏi một thư mục
- 8. Xóa tất cả các tệp git khỏi một thư mục?
- 9. Liệt kê tất cả các tệp và thư mục trong thư mục + thư mục con
- 10. Tìm tệp trong tất cả các thư mục có thể?
- 11. Danh sách tất cả thư mục và thư mục con
- 12. TCL: Tìm kiếm đệ quy các thư mục con để nguồn tất cả các tệp .tcl
- 13. Python: Cách chạy unittest.main() cho tất cả các tệp nguồn trong thư mục con?
- 14. sed người mới bắt đầu: thay đổi tất cả các lần xuất hiện trong một thư mục
- 15. Liệt kê các tệp trong thư mục và tất cả thư mục con
- 16. Linux tất cả các tệp của thư mục được sửa đổi ngày hôm qua
- 17. Tạo một thư mục con cho tất cả các thư mục trong thư mục
- 18. Xóa tất cả các tập tin trong một thư mục
- 19. Làm cách nào để tìm tất cả các tệp trong Thư mục có grep và regex?
- 20. Cách nén tất cả các tệp trong thư mục
- 21. Cách đếm tất cả các tệp trong một thư mục, thư mục con của nó và tất cả. Số đếm không được bao gồm số thư mục
- 22. grep trong tất cả các thư mục
- 23. Python - Nhận đường dẫn tương đối của tất cả các tệp và thư mục con trong một thư mục
- 24. Làm cách nào để xóa tất cả các mục và thêm các mục mới vào UICollectionView?
- 25. Git thêm tất cả các tệp đã sửa đổi, xóa và không được theo dõi?
- 26. Làm thế nào để xóa tất cả các tệp gần đây đã được tạo trong một thư mục trong linux?
- 27. Mở tất cả các tệp trong một thư mục
- 28. Java tải xuống tất cả các tệp và thư mục trong một thư mục
- 29. Di chuyển tất cả các DLL và PYD đến một thư mục con với cx_Freeze
- 30. Tìm tất cả các thư mục con của thư mục Inbox sử dụng EWS
Vui lòng chỉ định nội dung mới được tạo cho bạn. Trong giờ trước? Ngày cuối cùng? Kể từ một năm? Nếu bạn biết cách xây dựng một cây thư mục, tại sao bạn không sử dụng 'os.lstat' để truy cập các thuộc tính của tệp? – hochl
Trong giờ trước .... – nsh
sau đó sử dụng trường 'st = os.lstat (filepath)' và trường 'st.st_mtime' và kiểm tra xem chênh lệch với thời gian hiện tại có nhỏ hơn 1800 hay không - đó là nó. – hochl