Có thực sự không có cách nào trong Linux để có thời gian tạo tập tin trên chia sẻ cifs / smb?


6

Tôi lúng túng trong một kịch bản sao lưu bash và đã bỏ lỡ một cái gì đó lớn. Tôi biết rằng hệ thống tệp ext3 không theo dõi ngày tạo, nhưng sao chép tệp trong ext3 cập nhật thời gian thay đổi như đã thấy qua stat (sẽ hoạt động). Tuy nhiên, khi các tệp được sao chép từ một máy chủ Windows sang một máy chủ khác (có gắn kết tôi có thông qua smb / cifs), từ thử nghiệm của tôi, thời gian thay đổi không được cập nhật. Tôi đang sử dụng find để thực hiện tìm kiếm trên các cổ phiếu cifs. Có thực sự không có cách nào để phát hiện khi một tệp mới được tạo qua chia sẻ cifs từ Linux bằng cách sử dụng "find"?

Ngoài ra, tôi rất quen thuộc với rsync, và trong trường hợp này, các hạn chế của rsync loại trừ nó như là một tùy chọn. Tôi đã nghĩ rằng tôi có thể sử dụng rsync cho việc tìm kiếm và cố gắng đưa kết quả vào hành động (gzip), nhưng tôi nghĩ rằng các subshells sẽ là vô lý. Có thể sai, tất nhiên. Bất kỳ đề xuất sẽ được nhiều đánh giá cao. Có thể cung cấp thêm chi tiết, nhưng từ nghiên cứu của tôi, tôi không nghĩ rằng nó có thể.


Stat (1) (một phần của GNU coreutils, rất có thể được cài đặt trong coreutils gói cho bất kỳ phân phối nào bạn đang sử dụng) cung cấp cho bạn quyền truy cập / thay đổi / sửa đổi cho một tệp nằm trong hệ thống tệp được đề cập? Điều đó có thể cung cấp cho bạn một số gợi ý ít nhất.
Sami Laine

Statcung cấp thời gian truy cập, sửa đổi thời gian và thay đổi thời gian. Sao chép một tập tin trong ext3 cập nhật thay đổi thời gian. Windows (NT) đã tạo ra thời gian, tất nhiên, được cập nhật khi một tệp được tạo thông qua một bản sao. Tuy nhiên, từ câu trả lời của JdeBP bên dưới, các coretutils GNU như stat, lsfind, không có cách nào để phát hiện hoặc hiển thị các tệp mới được tạo trên các máy Windows qua chia sẻ cifs. Cám ơn bạn đã góp ý.
kiwisan

Câu trả lời:


16

Nhân Linux đã có một xstat(2)cuộc gọi hệ thống trong các công trình trong vài năm nay. David Howells của RedHat đã làm phần lớn công việc. xstat(2)cho phép một người lấy lại thời gian tạo (đôi khi xác định lại "thời gian sinh" hoặc "thời gian sinh" trong thế giới Linux và BSD mà không có lý do thực sự tốt) của các tệp từ một số hệ thống tệp hỗ trợ nó, bao gồm EXT4 (có dấu thời gian tạo trên đĩa) và CIFS (với di sản DOS / OS / 2 / Windows của nó đã hỗ trợ dấu thời gian sáng tạo như một công dân hạng nhất trong nhiều thập kỷ). M. Howells làm việc trên các bản vá CIFS đi cùng với lệnh gọi hệ thống.

OpenSolaris và BSD thực sự có một st_birthtimmốc thời gian trong stat(2)cuộc gọi hệ thống của họ ngay bây giờ và tính năng này có thể truy cập được đối với người viết kịch bản thông qua các chương trình ứng dụng như findls. Trên OpenSolaris lstrang người đàn ông bạn sẽ tìm thấy crtimebên cạnh atime, mtimectimeở một số nơi. Tương tự, FreeBSD findlệnh có -Bmin, -Bnewer-Btimebầu cử sơ bộ. Và Mac OS lscó một -Utùy chọn.

Nếu bạn đang viết kịch bản cho OpenSolaris, BSD hoặc Mac OS 10, bạn có thể tiếp tục với bất cứ điều gì bạn muốn làm với thời gian tạo ngay bây giờ. Thật vậy, nếu bạn đang viết cho Windows, bạn cũng có thể làm như vậy. Cygwin đã hỗ trợ st_birthtim từ năm 2007 , tạo CreationTimedấu thời gian của Win32 , phiên bản Windows NT đầu tiên và Windows NT duy trì trên cả hai ổ NTFS và FAT, có sẵn cho các công cụ Cygwin.

Tuy nhiên, điều tương tự không đúng trong thế giới GNU Linux. Khả năng thời gian tạo vẫn chưa được đưa vào GNU coreutils 'ls hoặc GNU findutils'find . Thật vậy, nó thậm chí không phải là một phần của nhân Linux chính thống. Một phần của vấn đề là xstat(2)cuộc gọi hệ thống đã bị sa lầy trong sự chuyển hướng mà mọi người muốn giữ ba dấu thời gian, thay vì có bốn như trong API hạt nhân Windows NT và kết xuất ctimeđể thay thế nó crtime.

Câu trả lời của Linus Torvalds năm 2010 là "tất cả đều vô dụng và mọi người thậm chí không thể đồng ý về một cái tên" và "Chúng ta hãy đợi năm năm".

Trên thực tế, như tôi nghi ngờ hầu hết mọi người đọc điều này sẽ biết, thế giới đã đồng ý rộng rãi cái tên "thời gian sáng tạo" từ những năm 1980 và chúng tôi đã chờ đợi ít nhất 25 năm rồi. Đó là tên được sử dụng trong OS / 2 1.0; đó là tên được sử dụng trong VMS ODS-1; đó là tên được sử dụng trong Windows NT 3.5; đó là tên được sử dụng trong SMB; và đó là tên được sử dụng trong câu hỏi. ☺

đọc thêm


Cảm ơn bạn đã dành thời gian để trả lời một cách kỹ lưỡng, và để đọc thêm. Một câu hỏi: Tôi nghĩ rằng rsync dựa vào statcác cuộc gọi. Làm thế nào để rsync thực hiện điều này khác nhau hơn findhoặc ls?
kiwisan

statxđã được thêm vào 4.11. Hệ thống tập tin cifs cũng hiển thị thời gian tạo dưới dạng giả xattr, user.cifs.creationtimecó giá trị là Win32 FILETIME (64 bit lưu trữ số lượng khoảng 100 nano giây kể từ ngày 1 tháng 1 năm 1601 UTC), mặc dù chỉ có thể đọc, không được đọc.
Jeffrey Bosboom

1

Tôi thực sự không thể trả lời câu hỏi này, nhưng ít nhất tôi có thể cho bạn một gợi ý: cuốn sách Thực hiện CIFS: Hệ thống tệp Internet chung của Christopher R. Hertel có hai trang rất thú vị này:

trang 1trang 2

Chúng dường như chỉ ra rằng có thể lấy thông tin bạn đang tìm kiếm.

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.