@MichaelScheper: Saya bahkan tidak tahu harus mulai dari mana dengan komentar itu.
Lightness Races in Orbit
1
@Notinlist: Inilah jawabannya: meta.stackexchange.com/questions/10249/... Sayangnya, ternyata batas waktu telah kedaluwarsa. Sayang sekali, karena pencarian web masih mendarat di sini, dan jawaban yang diterima sangat membantu bagi banyak orang.
Michael Scheper
@MichaelScheper: Jika Anda dapat menemukan opsi untuk memilih untuk bermigrasi ke unix.stackexchange.com, dengan segala cara arahkan saya ke sana. Karena Anda tidak memiliki perwakilan untuk melihat dialog tutup, saya akan memberi Anda petunjuk: tidak ada. Pertimbangkan untuk tidak terlalu agresif ketika Anda tidak tahu apa yang Anda bicarakan. Terima kasih atas perhatian anda
Lightness Races in Orbit
5
@LightnessRacesinOrbit: Saya minta maaf karena tampil sebagai 'agresif'. Saya tidak diizinkan mengedit komentar saya, tetapi untuk referensi di masa mendatang, apakah komentar saya memuji pertanyaan yang menyinggung Anda? Saya harus mengatakan, saya merasa agak buta, bahkan setelah memberikan komentar Anda sebelumnya tentang keraguan. Saya sebenarnya berusaha lebih konstruktif daripada menambahkan 'saya juga' yang lain, dengan mencari cara kerja migrasi: meta.stackexchange.com/a/10250/249555 Batas waktu 60 hari menyembunyikan opsi itu, mungkin? Maaf untuk gelandangan mengarahkan. Sekali lagi terima kasih — dengan tulus — atas waktu dan perhatian Anda.
Michael Scheper
Jawaban:
323
Seperti yang ditunjukkan oleh Max, Anda tidak bisa, tetapi memeriksa file yang dimodifikasi atau diakses tidak terlalu sulit. Saya menulis tutorial tentang ini, hingga hari ini. Inti dari yang digunakan -newerXYdan ! -newerXY:
Contoh: Untuk menemukan semua file yang dimodifikasi pada tanggal 7 Juni 2007:
$ find .-type f -newermt 2007-06-07!-newermt 2007-06-08
Untuk menemukan semua file yang diakses pada 29 September 2008:
$ find .-type f -newerat 2008-09-29!-newerat 2008-09-30
Atau, file yang izinnya berubah pada hari yang sama:
$ find .-type f -newerct 2008-09-29!-newerct 2008-09-30
Jika Anda tidak mengubah izin pada file, 'c' biasanya akan sesuai dengan tanggal pembuatan.
Versi find saya (GNU 4.2.32) tampaknya tidak mendukung predikat -newerXY. Apakah diperlukan versi minimum tertentu? Atau itu kasus kompilasi find dengan switch configure khusus?
yukondude
1
@yukondude: Anda benar. Versi find yang saya miliki secara lokal - GNU 4.4.0 - memilikinya, sementara 4.1.20 yang saya miliki di Dreamhost tidak. Namun, kludge dengan membuat dua file juga bisa digunakan.
Arve
1
Pada beberapa sistem (FreeBSD, OS / X ...) -newerBtakan cocok dengan waktu kelahiran (pembuatan) file .
Stephane Chazelas
3
Perhatikan bahwa -newerxttersedia di FreeBSD sejak tahun 2001 (di mana pertama kali disediakan sebagai tambalan pada tahun 1998), beberapa BSD dan GNU lainnya ditemukan (sejak 4.3.3 pada tahun 2007), berdasarkan temuan HP / UX, yang diperkenalkan -newerXY(tetapi di mana Y == t tidak didukung).
Stephane Chazelas
Menggunakan: find (GNU findutils) 4.4.0, sintaks ini tidak berfungsi pada SUSE ext3, jika itu seharusnya membuat daftar file / w mtime pada tanggal itu, ia tidak menghasilkan apa
Masalahnya adalah saya ingin menguji untuk tanggal tertentu, bukan dalam periode waktu.
sverrejoh
1
Jadi cari tahu berapa hari yang lalu dan gunakan nomor itu.
jmanning2k
15
ctimetidak ada hubungannya dengan waktu pembuatan , itu waktu perubahan inode.
Stephane Chazelas
47
Ini dua langkah tapi saya suka melakukannya dengan cara ini:
Pertama buat file dengan tanggal / waktu tertentu. Dalam hal ini, file adalah 2008-10-01 pada tengah malam
touch -t 0810010000/tmp/t
Sekarang kita dapat menemukan semua file yang lebih baru atau lebih tua dari file di atas (berdasarkan tanggal modifikasi file. Anda juga dapat menggunakan -anewer untuk diakses dan -cnewer status file berubah).
find /-newer /tmp/t
find /-not -newer /tmp/t
Anda juga dapat melihat file di antara tanggal tertentu dengan membuat dua file dengan sentuhan
+1 untuk solusi bagi yang lebih tua findyang kurang-newerXY
Felipe Alvarez
1
IMO, sekarang ini harus menjadi solusi yang diterima. Saya tidak bisa menjalankan -newermt untuk menjalankan kernel 2.6.18-348.18.1.el5, apalagi kernel yang lebih baru.
DarkForce
Sama di sini, DarkForce, fungsionalitas baru tampaknya sangat sulit
Inilah yang kebanyakan orang inginkan, tetapi tidak menerima cukup upvotes !!!
sjas
2
ini mungkin tidak berfungsi jika memiliki beberapa juta file dalam satu direktori.
Dennis Nolte
3
Ada efek samping jika istilah pencarian grep ada dalam nama file.
Snorex
mywiki.wooledge.org/ParsingLs - pendekatan yang lebih baik mungkin untuk mencetak tanggal pembuatan dalam bentuk yang dapat dibaca mesin, mungkin dengan statjika Anda tidak punya find -printf.
tripleee
12
Kamu tidak bisa Saklar -c memberi tahu Anda ketika izin terakhir diubah, -a menguji waktu akses terbaru, dan -m menguji waktu modifikasi. Sistem file yang digunakan oleh sebagian besar rasa Linux (ext3) tidak mendukung catatan "waktu pembuatan". Maaf!
Sebenarnya, ini bukan hanya tipe sistem berkas - tidak ada antarmuka sistem untuk mendapatkan informasi tersebut, bahkan jika sistem berkas menahannya. Salah satu kekurangan Unix adalah kembali ke hari-hari awal, itulah sebabnya Unix tidak akan pernah lepas landas.
chrisdowney
1
Unix tidak akan pernah lepas landas?
lucid_dreamer
8
@ Max: benar tentang waktu pembuatan.
Namun, jika Anda ingin menghitung hari argumen berlalu untuk salah satu -atime, -ctime, -mtimeparameter, Anda dapat menggunakan ekspresi berikut
Ganti "2008-09-24" dengan tanggal apa pun yang Anda inginkan dan ELAPSED_DAYS akan ditetapkan ke jumlah hari antara saat itu dan hari ini. (Perbarui: kurangi satu dari hasil untuk menyelaraskan dengan findpembulatan tanggal.)
Jadi, untuk menemukan file yang dimodifikasi pada 24 September 2008, perintahnya adalah:
find .-type f -mtime $((( $(date +%s)- $(date -d '2008-09-24'+%s))/60/60/24-1))
Ini akan berfungsi jika versi findAnda tidak mendukung -newerXYpredikat yang disebutkan dalam jawaban @Arve:.
Jawaban:
Seperti yang ditunjukkan oleh Max, Anda tidak bisa, tetapi memeriksa file yang dimodifikasi atau diakses tidak terlalu sulit. Saya menulis tutorial tentang ini, hingga hari ini. Inti dari yang digunakan
-newerXY
dan! -newerXY
:Contoh: Untuk menemukan semua file yang dimodifikasi pada tanggal 7 Juni 2007:
Untuk menemukan semua file yang diakses pada 29 September 2008:
Atau, file yang izinnya berubah pada hari yang sama:
Jika Anda tidak mengubah izin pada file, 'c' biasanya akan sesuai dengan tanggal pembuatan.
sumber
-newerBt
akan cocok dengan waktu kelahiran (pembuatan) file .-newerxt
tersedia di FreeBSD sejak tahun 2001 (di mana pertama kali disediakan sebagai tambalan pada tahun 1998), beberapa BSD dan GNU lainnya ditemukan (sejak 4.3.3 pada tahun 2007), berdasarkan temuan HP / UX, yang diperkenalkan-newerXY
(tetapi di mana Y == t tidak didukung).find location -ctime time_period
Contoh time_ period:
Lebih dari 30 hari yang lalu:
-ctime +30
Kurang dari 30 hari yang lalu:
-ctime -30
Tepat 30 hari yang lalu:
-ctime 30
sumber
ctime
tidak ada hubungannya dengan waktu pembuatan , itu waktu perubahan inode.Ini dua langkah tapi saya suka melakukannya dengan cara ini:
Pertama buat file dengan tanggal / waktu tertentu. Dalam hal ini, file adalah 2008-10-01 pada tengah malam
Sekarang kita dapat menemukan semua file yang lebih baru atau lebih tua dari file di atas (berdasarkan tanggal modifikasi file. Anda juga dapat menggunakan -anewer untuk diakses dan -cnewer status file berubah).
Anda juga dapat melihat file di antara tanggal tertentu dengan membuat dua file dengan sentuhan
Ini akan menemukan file antara dua tanggal & waktu
sumber
find
yang kurang-newerXY
Anda bisa melakukan ini:
Contoh:
sumber
stat
jika Anda tidak punyafind -printf
.Kamu tidak bisa Saklar -c memberi tahu Anda ketika izin terakhir diubah, -a menguji waktu akses terbaru, dan -m menguji waktu modifikasi. Sistem file yang digunakan oleh sebagian besar rasa Linux (ext3) tidak mendukung catatan "waktu pembuatan". Maaf!
sumber
@ Max: benar tentang waktu pembuatan.
Namun, jika Anda ingin menghitung hari argumen berlalu untuk salah satu
-atime
,-ctime
,-mtime
parameter, Anda dapat menggunakan ekspresi berikutGanti "2008-09-24" dengan tanggal apa pun yang Anda inginkan dan ELAPSED_DAYS akan ditetapkan ke jumlah hari antara saat itu dan hari ini. (Perbarui: kurangi satu dari hasil untuk menyelaraskan dengan
find
pembulatan tanggal.)Jadi, untuk menemukan file yang dimodifikasi pada 24 September 2008, perintahnya adalah:
Ini akan berfungsi jika versi
find
Anda tidak mendukung-newerXY
predikat yang disebutkan dalam jawaban @Arve:.sumber
Dengan sakelar -atime, -ctime, dan -mtime untuk ditemukan, Anda bisa mendekati apa yang ingin Anda capai.
sumber
sumber
`ls ...`
bekerja, itu tidak menggunakanfind
alat.Saya menemukan skrip ini dalam skrip yang menghapus semua file yang lebih lama dari 14 hari:
Saya pikir sedikit tambahan "man find" dan mencari parameter -ctime / -atime dll. Akan membantu Anda di sini.
sumber