Tôi đang sử dụng Bash trên Debian GNU/Linux 6.0. Có thể lấy ngày/giờ tạo tệp không? Không phải ngày/giờ sửa đổi. ls -lh a.txt
và stat -c %y a.txt
cả hai chỉ cung cấp thời gian sửa đổi.Cách nhận ngày/giờ tạo tệp trong Bash/Debian?
Trả lời
Đáng tiếc là nhiệm vụ của bạn sẽ không thể nói chung, như chỉ có 3 giá trị thời gian riêng biệt được lưu trữ cho mỗi tập tin của bạn theo quy định của tiêu chuẩn POSIX (xem Base Definitions section 4.8 File Times Update)
Mỗi tập tin có ba biệt dấu thời gian được liên kết: thời gian truy cập dữ liệu cuối cùng, thời gian sửa đổi dữ liệu cuối cùng và thời gian tệp được thay đổi lần cuối vào trạng thái . Các giá trị này được trả về trong cấu trúc đặc trưng của cấu trúc struct stat, như được mô tả trong <sys/stat.h>.
EDIT: Như đã đề cập trong các nhận xét bên dưới, tùy thuộc vào siêu dữ liệu được sử dụng hệ thống tập tin có thể chứa ngày tạo tệp. Lưu ý tuy nhiên việc lưu trữ thông tin như vậy không phải là tiêu chuẩn. Tùy thuộc vào nó có thể dẫn đến vấn đề di chuyển di chuyển đến hệ thống tập tin khác, trong trường hợp một trong những thực sự được sử dụng bằng cách nào đó lưu trữ nó anyways.
cảm ơn bạn đã tham khảo. – NoodleFolk
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html –
Tin buồn này. Nó sẽ rất hữu ích ngay bây giờ để xác định dễ dàng cho dù một tập tin đã bị xóa và tái tạo hoặc đã có tất cả cùng. – froggythefrog
Ngày/giờ tạo thường là không được lưu giữ. Vì vậy, không, bạn không thể.
Lưu ý rằng nếu bạn đã có hệ thống tệp được gắn với thời gian không hoạt động vì lý do hiệu suất, thì thời gian rảnh sẽ có khả năng hiển thị thời gian tạo. Cho rằng thời gian chờ kết quả trong một tăng hiệu suất lớn (bằng cách loại bỏ một đĩa ghi cho mỗi lần đọc một tập tin), nó có thể là một tùy chọn cấu hình hợp lý mà cũng cung cấp cho bạn các kết quả mà bạn muốn.
Tôi không thể xác minh cho việc tăng hiệu suất, nhưng tôi đã đọc hướng dẫn về thời gian rảnh được đề xuất của SSD, vì vậy điều này đã hiệu quả đối với tôi. – jake
Câu trả lời của mikyra là tốt. Thực tế giống như những gì anh ấy nói.
[[email protected] test]$ stat test.txt
File: `test.txt'
Size: 0 Blocks: 8 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 588720 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 500/ jason) Gid: ( 500/ jason)
Access: 2013-03-14 01:58:12.000000000 -0700
Modify: 2013-03-14 01:58:12.000000000 -0700
Change: 2013-03-14 01:58:12.000000000 -0700
nếu bạn muốn xác minh tệp đã được tạo trước, bạn có thể cấu trúc tên tệp của mình bằng cách thêm vào ngày tháng của hệ thống.
Khi tôi làm stat myfile.txt, tôi nhận được một hàng khác: Sinh. Thật không may, nó không có giá trị. Tại sao hàng đó ở đó? – allyourcode
ls -i menus.xml
94490 menus.xml Ở đây số 94.490 đại diện inode
Sau đó làm một:
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg-root 4.0G 3.4G 408M 90%/
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/sda1 124M 27M 92M 23% /boot
/dev/mapper/vg-var 7.9G 1.1G 6.5G 15% /var
Để tìm điểm lắp của hệ thống tập tin gốc "/", bởi vì các menu tập tin.xml là vào '/' có nghĩa là '/ dev/mapper/VG-root'
debugfs -R 'stat < 94.490>'/dev/mapper/VG-gốc
Kết quả có thể giống như một trong những dưới đây:
debugfs -R 'stat < 94.490>'/dev/mapper/vG-gốc
debugfs 1.41.12 (17-May-2010)
Inode: 94490 Type: regular Mode: 0644 Flags: 0x0
Generation: 2826123170 Version: 0x00000000
User: 0 Group: 0 Size: 4441
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 16
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x5266e438 -- Wed Oct 23 09:46:48 2013
atime: 0x5266e47b -- Wed Oct 23 09:47:55 2013
mtime: 0x5266e438 -- Wed Oct 23 09:46:48 2013
Size of extra inode fields: 4
Extended attributes stored in inode body:
selinux = "unconfined_u:object_r:usr_t:s0\000" (31)
BLOCKS:
(0-1):375818-375819
TOTAL: 2
Nơi bạn có thể xem thời gian sáng tạo:
ctime: 0x5266e438 -- Wed Oct 23 09:46:48 2013
ctime không phải là thời gian tạo, đó là "thời gian sửa đổi lần cuối thông tin trạng thái tệp" – mokalan
ctime = "thay đổi thời gian", nơi thay đổi có nghĩa là sửa đổi chủ sở hữu, nhóm, đặc quyền hoặc một số thuộc tính khác. Nó không nhất thiết là thời gian tạo ra. – ingyhere
nó là crtime và không ctime .. nhưng cảm ơn! – Zibri
ls -i file #output is for me 68551981
debugfs -R 'stat <68551981>' /dev/sda3 # /dev/sda3 is the disk on which the file exists
#results - crtime value
[[email protected] ~]# debugfs -R 'stat <68551981>' /dev/sda3
debugfs 1.41.12 (17-May-2010)
Inode: 68551981 Type: regular Mode: 0644 Flags: 0x80000
Generation: 769802755 Version: 0x00000000:00000001
User: 0 Group: 0 Size: 38973440
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 76128
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x526931d7:1697cce0 -- Thu Oct 24 16:42:31 2013
atime: 0x52691f4d:7694eda4 -- Thu Oct 24 15:23:25 2013
mtime: 0x526931d7:1697cce0 -- Thu Oct 24 16:42:31 2013
**crtime: 0x52691f4d:7694eda4 -- Thu Oct 24 15:23:25 2013**
Size of extra inode fields: 28
EXTENTS:
(0-511): 352633728-352634239, (512-1023): 352634368-352634879, (1024-2047): 288392192-288393215, (2048-4095): 355803136-355805183, (4096-6143): 357941248-357943295, (6144
-9514): 357961728-357965098
ý nghĩa của ctime, atime và mtime là gì? –
@Velthune Thời gian tạo, thời gian truy cập, thời gian sửa đổi. Tuy nhiên tùy thuộc vào cách hệ thống tập tin được cấu hình các giá trị này có thể hoặc có thể không chính xác. Ví dụ, nhiều người vô hiệu hóa ghi thời gian truy cập cuối cùng vào các tập tin để lưu trên đĩa ghi thêm. – indivisible
@indivisible: FALSE! Các tiêu chuẩn POSIX định nghĩa ctime là thời gian thay đổi. Đây là khi một số thuộc tính tệp thay đổi, nói chung. – ingyhere
Khi @mikyra giải thích, thời gian tạo ngày không được lưu trữ ở bất kỳ đâu.
Tất cả các phương pháp trên là tốt đẹp, nhưng nếu bạn muốn nhanh chóng có được chỉ qua sửa đổi ngày, bạn có thể gõ:
ls -lit /path
với -t tùy chọn mà bạn liệt kê tất cả tập tin trong/path vừa đặt hàng cuối cùng bởi sửa đổi ngày.
Nếu bạn thực sự muốn đạt được điều đó, bạn có thể sử dụng trình xem tệp như inotifywait.
Bạn xem một thư mục và lưu thông tin về các tệp sáng tạo trong tệp riêng biệt bên ngoài thư mục đó.
while true; do
change=$(inotifywait -e close_write,moved_to,create .)
change=${change#./ * }
if [ "$change" = ".*" ]; then ./scriptToStoreInfoAboutFile; fi
done
Vì không có thời gian tạo được lưu trữ, bạn có thể xây dựng hệ thống của riêng mình dựa trên inotify.
Bạn có thể tìm thời gian tạo - còn gọi là thời gian sinh - sử dụng stat và cũng khớp với sử dụng tìm.
Chúng tôi có những tập tin hiển thị thời gian sửa đổi lần cuối:
$ ls -l --time-style=long-iso | sort -k6
total 692
-rwxrwx---+ 1 XXXX XXXX 249159 2013-05-31 14:47 Getting Started.pdf
-rwxrwx---+ 1 XXXX XXXX 275799 2013-12-30 21:12 TheScienceofGettingRich.pdf
-rwxrwx---+ 1 XXXX XXXX 25600 2015-05-07 18:52 Thumbs.db
-rwxrwx---+ 1 XXXX XXXX 148051 2015-05-07 18:55 AsAManThinketh.pdf
Để tìm các file được tạo ra trong một khung thời gian nhất định sử dụng tìm như dưới đây.
Rõ ràng, hệ thống tập tin biết về thời gian ra đời của một file:
$ find -newerBt '2014-06-13' ! -newerBt '2014-06-13 12:16:10' -ls
20547673299906851 148 -rwxrwx--- 1 XXXX XXXX 148051 May 7 18:55 ./AsAManThinketh.pdf
1407374883582246 244 -rwxrwx--- 1 XXXX XXXX 249159 May 31 2013 ./Getting\ Started.pdf
Chúng ta có thể khẳng định điều này bằng stat:
$ stat -c "%w %n" * | sort
2014-06-13 12:16:03.873778400 +0100 AsAManThinketh.pdf
2014-06-13 12:16:04.006872500 +0100 Getting Started.pdf
2014-06-13 12:16:29.607075500 +0100 TheScienceofGettingRich.pdf
2015-05-07 18:32:26.938446200 +0100 Thumbs.db
stat người đàn ông trang giải thích% w:
%w time of file birth, human-readable; - if unknown
Trích dẫn từ https://unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4/131347#131347, sau đây cô ấy llscript sẽ làm việc để có được thời gian tạo:
get_crtime() {
for target in "${@}"; do
inode=$(stat -c %i "${target}")
fs=$(df "${target}" | tail -1 | awk '{print $1}')
crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null | grep -oP 'crtime.*--\s*\K.*')
printf "%s\t%s\n" "${target}" "${crtime}"
done
}
thậm chí tốt hơn:
lsct()
{
debugfs -R 'stat <'`ls -i "$1" | (read a b;echo -n $a)`'>' `df "$1" | (read a; read a b; echo "$a")` 2> /dev/null | grep --color=auto crtime | (read a b c d;
echo $d)
}
lsct/etc
Wed Jul 20 19:25:48 2016
- 1. Android: Cách nhận ngày tạo tệp?
- 2. Nhận ngày tạo tệp trong nút
- 3. cách nhận tệp .mobileprovision và tệp .app
- 4. Cách tạo tệp trong Android?
- 5. Mục tiêu-c: Nhận ngày tạo tệp
- 6. Cách nhận độ dài tệp trong Go?
- 7. Android - cách hủy đăng ký người nhận được tạo trong tệp kê khai?
- 8. Cách tạo tệp hằng số trong Javascript?
- 9. Cách tạo Tệp bằng FILE_ATTRIBUTE_TEMPORARY trong C#?
- 10. Cách tạo tệp mới trong unix
- 11. Cách tạo tệp Jar trong Netbeans
- 12. Cách tạo tệp trứng Python
- 13. Cách tạo tệp chm?
- 14. Cách tạo tệp .mbtiles?
- 15. Cách tạo hai tệp xmlbeans trong một tệp pom
- 16. Nhận loại tệp trong .NET
- 17. Ngày tạo tệp trong android
- 18. Nhận "Tệp nguồn khác với khi mô-đun được tạo."
- 19. cách tạo tệp tiêu đề và tệp nguồn của tệp .ui trong Qtdesigner?
- 20. Xác nhận tên tệp trong python
- 21. Node.js: Cách tạo tệp XML
- 22. Cách nhận thời lượng của tệp video?
- 23. Nhận thời gian tạo tệp bằng Python trên linux
- 24. Tạo tệp JSON trực tuyến và nhận URL
- 25. Cách nhận số lượng childnode trong tệp XML bằng XQuery
- 26. Cách nhận tệp qua GitHub API
- 27. Cách tạo truy vấn trả lời nhận xét trong MYSQL?
- 28. Tạo tệp .csv trong C#
- 29. Laravel 4: cách tạo email xác nhận?
- 30. Cách tạo tệp SDP từ FFMPEG
Bạn đang sử dụng một hệ thống tập tin mà thời gian tạo bản ghi? Hầu hết là không. –
Xem http://askubuntu.com/questions/470134/how-to-find-the-creation-time-of-a-file –