Bagaimana saya bisa mendaftar secara rekursif semua file yang diubah antara 22.12.2011 dan 24.12.2011?
files
recursive
timestamps
penjepit
sumber
sumber
Jawaban:
Secara umum, ketika Anda mencari file dalam direktori dan subdirektori secara rekursif, gunakan
find
.Cara termudah untuk menentukan rentang tanggal
find
adalah dengan membuat file pada batas rentang dan menggunakan-newer
predikat.sumber
-newer
diperlukan di sini?-newer
tidak dinegasikan, yang kedua adalah. "Temukan file yang lebih baru daristart
tetapi tidak lebih baru daristop
".start
danstop
.Menggunakan solusi Gilles dan setelah membaca lelaki itu menemukan (1) lagi saya menemukan solusi yang lebih sederhana. Pilihan terbaik adalah -newerXY. Bendera m dan t dapat digunakan.
Jadi solusinya adalah
Batas bawah inklusif, dan batas atas eksklusif, jadi saya menambahkan 1 hari untuk itu! Dan itu bersifat rekursif. Ini bekerja dengan baik pada find v4.5.9.
sumber
find -newermt 20150212 \! -newermt 20150213 | xargs grep 'keyword' -m 50 -l
(-m 50
= cari di 50 baris pertama).-exec ... +
difind(1)
, seperti:find -newermt 20150212 \! -newermt 20150213 -exec grep keyword -m 50 -l {} +
. Ini melakukan hal yang sama, tetapi lebih murah.find 4.7.0-git
).Selain jawaban yang sudah diberikan, perhatikan bahwa Anda dapat langsung menentukan tanggal Anda:
atau
jika Anda juga ingin menentukan waktu.
sumber
Dengan asumsi Anda tidak membutuhkan ketelitian pada detik, ini seharusnya bekerja.
EDIT: Diubah
cmin
menjadimmin
setelah komentar @ Eelvex. EDIT: '\!' hilangsumber
-cmin
adalah "perubahan status",-mmin
adalah "perubahan data". Anda mungkin ingin-mmin
find
dapat mengambil datetime yang diformat ISO, jadi untuk server di UTC misalnya, Anda dapat menentukan offset beberapa jam dari mana pun Anda berada. Ini juga harus ditambah satu hari karena Anda juga membandingkan waktu:sumber
Harap perhatikan bahwa pertanyaan yang ditandai sebagai rangkap, dan karena itu dibatasi untuk menjawabnya secara langsung, itulah sebabnya saya memposting ke sini. Jawaban ini untuk menjawab pertanyaan "perlu memindahkan file ke folder berbeda berdasarkan tanggal pembuatan [duplikat]"
Jawabannya masuk akal tetapi ada beberapa batasan dengan perintah find murni. Saya menulis skrip shell ini untuk pergi melalui direktori dengan begitu banyak file di dalamnya sistem file tersedak metadata yang mencoba melakukan ls. Selain itu beberapa sistem * nix akan memunculkan kesalahan argumen terlalu banyak dengan menjalankan ls.
Perintah find sangat kuat dan saya mulai dengan metode yang terdaftar tetapi saya memiliki data bertahun-tahun di seluruh direktori itu sehingga saya harus melewati semua file berulang kali. Ini menghasilkan banyak yang tidak perlu melewati setiap file. Saya mencoba melakukan satu layar per tahun dan menjalankan beberapa penemuan tetapi ini menghasilkan banyak kesalahan dari setiap penemuan dan file-file akan hilang ketika salah satu temuan memindahkannya.
Script shell saya memindahkan file ke direktori tujuan, dengan tahun 4 digit dan bulan 2 digit. Ini dapat dengan mudah diperluas menjadi 2 digit hari dengan membatalkan komentar beberapa baris dan berkomentar rekan-rekan mereka. Saya percaya ini lebih efisien karena melakukan gerakan dalam satu pass find sehingga banyak perintah find dan melewati direktori tidak diperlukan.
Setelah disimpan dan dapat dieksekusi, Anda dapat memanggil skrip ini dengan find seperti yang berikut ini.
Anda tidak perlu khawatir tentang pengaturan opsi newermt untuk menemukan karena semua find menyediakan adalah eksekusi tunggal per file ditemukan dan script membuat semua keputusan.
Ingatlah bahwa jika Anda tidak memilih -type f, ia akan memindahkan direktori dan itu akan menyebabkan masalah. Anda juga bisa menggunakan -type d jika Anda ingin memindahkan direktori saja. Tidak mengatur jenisnya hampir pasti akan menghasilkan perilaku yang tidak diinginkan.
Ingat bahwa naskah ini disesuaikan dengan kebutuhan saya . Anda mungkin ingin menggunakan konstruksi saya sebagai inspirasi untuk naskah yang lebih sesuai dengan kebutuhan Anda. Terima kasih!
Pertimbangan: Efisiensi perintah dapat sangat ditingkatkan dengan memungkinkan argumen tanpa batas melewati skrip. Ini sebenarnya relatif mudah jika Anda melewati variabel $ @. Memperluas fungsi ini akan memungkinkan kita untuk menggunakan fungsi -exec + fungsi atau leverage xargs, misalnya. Saya dapat dengan cepat mengimplementasikannya dan meningkatkan jawaban saya sendiri tetapi ini adalah awal.
Karena ini adalah sesi skrip satu langkah, mungkin ada banyak perbaikan yang dapat dilakukan. Semoga berhasil!
sumber