Temukan semua file yang lebih lama dari satu menit

8

Bagaimana saya dapat menggunakan finduntuk memilih file yang telah ditulis dan tidak dimodifikasi pada menit terakhir?

Saya tahu saya bisa melakukannya sebaliknya, menemukan file yang dimodifikasi dalam 60 detik terakhir -mtime -60s, tapi saya ingin yang belum dimodifikasi dalam 60 detik terakhir.

Saya menggunakan Linux dan mendapatkan kesalahan ini jika saya menggunakan detik:

find ??/ -mtime +60s -name blah.tsv
find: invalid argument `+60s' to `-mtime'
719016
sumber

Jawaban:

13

Menggunakan find /path -type f -mtime +60s

The -sebelum digit tidak biasa "argumen dash", tetapi berarti "kurang dari". +maka "lebih dari".

Dari man find:

Semua pemilihan pendahuluan yang menggunakan argumen numerik memungkinkan angka didahului oleh tanda tambah (`` + '') atau tanda minus (`` - ''). Tanda plus sebelumnya berarti `` lebih dari n '', tanda minus sebelumnya berarti `` kurang dari n '' dan tidak juga berarti `` tepat n ''.

Perlu dicatat bahwa untuk tepat n , waktunya bulat. Jadi 1(1 hari) bukan berarti 86400 detik.

Daniel Beck
sumber
2
Sebenarnya, +60bukan kebalikan dari -60, karena alasan yang sama kurang dari bukan kebalikan dari lebih besar dari : Keduanya mengecualikan nilai persis yang mereka bandingkan. Tetapi pertanyaan Anda tidak menunjukkan perilaku yang Anda inginkan, tepatnya.
Daniel Beck
Ini memang tidak persis sama, karena! mengembalikan "permintaan" asli. Tetapi setuju, OP tidak menentukan apa yang dia inginkan.
Karolos
Sehari kemudian, OP menyatakan itu di Linux, bukan Mac OS X. Jika itu akan mengubah jawabannya, dapatkah Anda memperbaruinya?
Peter Mortensen
1
Ya, ini tidak berfungsi di Linux. Setidaknya RHEL 5.6. Namun, tanggapan SiegeX di bawah ini berfungsi.
MattPark
2
Ini tidak berfungsi pada CentOS. Seperti yang seharusnya bekerja di Mac OS X
trante
14
find . -type f -mmin +1

Contoh

$ ls *
four.txt  one.txt  three.txt  two.txt

$ touch foo && find . -mmin +1
.
./three.txt
./four.txt
./two.txt
./one.txt
SiegeX
sumber
Tidak lagi ditandai osx.
Peter Mortensen
4

Yang kedua -di -mtime -60sini tidak merupakan pembatas pilihan.

-mtimeadalah opsi, dan diikuti oleh argumen opsi . Argumen opsi adalah -60s, dan -di dalamnya adalah bagian dari argumen opsi itu sendiri, bukan pembatas opsi. Itu berarti "kurang dari 60 detik". Argumen opsi 60sdan +60srata - rata "sama dengan 60 detik" dan "lebih besar dari 60 detik".

Manual Apple MacOS dan manual FreeBSD menyebutkan +dan -awalan di satu tempat, dan lupa untuk menjelaskan di mana saja mereka. Inilah mereka.

(Manual Info GNU untuk GNU findmemiliki kelalaian yang sama, cukup menarik. Namun, findsintaksis GNU untuk waktu agak berbeda dengan findsintaks BSD dan MacOS .)

Bacaan lebih lanjut

JdeBP
sumber
1
Ini bahkan lebih buruk daripada hanya menjelaskannya di satu tempat saja : Semua opsi lain merujuk ke atimeformat waktu, tetapi itu juga tidak menjelaskan awalan . Ini bagian terpisah yang tidak dirujuk.
Daniel Beck
Memang; dan Anda akan menemukan bahwa saya menulisnya. Saya menulis "sebutkan", dan "lupa untuk menjelaskan di mana saja". ☺
JdeBP
Saya tidak bermaksud menentang Anda, hanya ingin menunjukkan bahwa satu tempat yang tepat juga merupakan tempat terburuk dari POV.
Daniel Beck
Tapi itu tidak dijelaskan di satu tempat. Itu tidak dijelaskan di sembarang tempat. Untuk satu set halaman manual yang umumnya ditulis dan diedit dengan cukup baik, menurut pengalaman saya, ini adalah penghilangan yang mengejutkan.
JdeBP
1
Heh! Itu karena Anda sudah tahu jawabannya secara ajaib dan dapat menghubungkan twain ketika membaca dokumen, mengisi apa yang sebenarnya tidak tertulis. Orang-orang yang tidak memiliki (y) pengetahuan awal kita dan sedang membaca manual untuk mencari tahu harus bertanya-tanya mengapa tidak ada penjelasan tentang apa yang "pengubah" ada di mana saja. ☺
JdeBP
3

Anda harus bisa menggunakannya

find . ! -mtime -60s
Karolos
sumber
1
Membutuhkan tanda kurung untuk saya:find . !( -mtime -60s )
Der Hochstapler
@ OliverSalzburg: Di Mac saya, ia berfungsi dengan baik tanpa tanda kurung (Darwin Kernel Versi 11.2.0).
Karolos
1

Dalam sistem Unix - waktu digunakan untuk diikuti oleh +/- diikuti oleh angka diikuti oleh satuan waktu. [+ -] nn [dms]

Linux menggunakan mtime selama berhari-hari, mmin selama beberapa menit, tetapi sepertinya tidak ada opsi detik dan tidak menggunakan penentu satuan waktu. Tanda + atau - masih mengacu pada lebih dari atau kurang dari waktu daripada menjadi argumen opsi seperti yang disebutkan di atas.

Anda dapat menggunakan -mmin 1, tetapi /unix/238738/find-files-newer-than-15-seconds-but-older-than-2-seconds membahas cara menangani detik secara umum .

Nick Greenwood
sumber