GNU/Linux >> Belajar Linux >  >> Linux

Mengapa find -mtime tidak berfungsi seperti yang diharapkan pada file dengan zona waktu berbeda?

Solusi 1:

Ada kemungkinan bahwa masalah zona waktu adalah pengalih perhatian.

find . -mtime 7

harus menemukan file yang berumur tepat tujuh hari ("tujuh" berarti antara 7.000 dan 7.999 hari, memberi atau menerima, dan "lama" berarti "sejak modifikasi terakhir"). Jika Anda menginginkan file yang berumur lebih dari tujuh hari, yang dilihat dari tanggal pada file pertama Anda (Juni 2010), cobalah

find . -mtime +7

Saya setuju dengan Anda tentang zona waktu yang tampak aneh, tapi menurut saya itu bisa dijelaskan. man stat jelas bahwa time_t disimpan, seperti yang dikatakan Sean R di bawah. Apa ls lakukan adalah menampilkannya sebagai waktu lokal, dan cukup baik untuk mempertimbangkan konvensi penghematan siang hari setempat saat melakukannya.

Sistem saya sama:waktu file yang jatuh pada Mar-Okt ditampilkan dengan zona waktu +0100 sedangkan yang jatuh pada Okt-Mar ditampilkan dengan zona waktu +0000, bukan karena ini disimpan dalam sistem file, tetapi karena file zona waktu memberi tahu sistem saya bahwa pada bulan Juni, ketika saya menyentuh file tersebut, saya akan melakukannya pada waktu yang saya pikir adalah jam 8 pagi, bukan-akan-menjadi-7 pagi-jika-musim dingin. ls cukup berbaik hati, saat menampilkan waktu yang kebetulan berada di musim panas, untuk menunjukkannya sebagaimana seharusnya muncul di musim panas, itu saja.

Jika Anda dapat menemukan zona waktu di ls Anda output yang bukan musim panas atau musim dingin menurut konvensi lokal Anda, maka saya salah - tetapi saya tidak dapat menemukannya di sistem saya.

Solusi 2:

Dengan find, -mtime bekerja dalam periode 24 jam jadi

-mtime 0 or -mtime -1 mean today
-mtime 3 would mean 3 days old
-mtime +1 means greater than one day old 
-mtime -7 means less than 7 days old

Solusi 3:

Untuk menjelaskan bagian zona waktu sedikit lebih banyak ("mtime" diskusi ditangani oleh komentar lain)...

Tanggal dan waktu disimpan dalam file sebagai detik sejak tengah malam 1 Januari 1970, UTC. Berarti tidak ada zona waktu yang terkait dengannya. Program kemudian menggunakan pengaturan zona waktu sistem di /etc/timezone , kecuali diganti oleh variabel lingkungan "TZ", untuk menampilkan waktu tersebut dalam zona waktu lokal:

chats:/tmp$ touch foo
chats:/tmp$ ls -l foo
-rw-r--r-- 1 jafo jafo 0 Dec  1 06:14 foo
chats:/tmp$ TZ=GMT ls -l foo
-rw-r--r-- 1 jafo jafo 0 Dec  1 13:14 foo
chats:/tmp$

Perhatikan di baris terakhir ini menunjukkan 13:14, dan di output di atasnya, di mana saya menggunakan zona waktu default saya waktu Pegunungan AS (GMT-0700) itu menunjukkan 6:14 pagi. Perbedaannya adalah "ls" kedua saya menyetel variabel lingkungan TZ ke GMT.

Anda mungkin ingin menggunakan "stat" untuk memeriksa semua waktu/tanggal yang terkait dengan file juga.


Linux
  1. Mengapa Ekspresi Reguler Bekerja Di X Tapi Tidak Di Y?

  2. Memetakan Metadata Dengan Avconv Tidak Berfungsi?

  3. Perintah Rm Dalam Skrip Bash Tidak Bekerja Dengan Variabel?

  1. Mengapa `keluar &` Tidak Berfungsi?

  2. Mengapa find -exec mv {} ./target/ + tidak berfungsi?

  3. Mengapa git gagal saat Push/fetch dengan Terlalu banyak file terbuka

  1. Mengapa mengedit javascript di Alat Pengembang Chrome tidak berfungsi?

  2. Mengapa 'dd' tidak berfungsi untuk membuat USB yang dapat di-boot?

  3. Mengapa regex ini tidak berfungsi di linux?