GNU/Linux >> Belajar Linux >  >> Linux

Menemukan dan menghapus file dengan tanggal tertentu

Anda dapat menggunakan find . Hitung tanggal sesuai dengan kebutuhan dan penggunaan Anda,

find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -print

Setelah mengonfirmasi, hapuslah,

find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -delete

Sebagai permulaan, temukan file dibuat pada waktu tertentu agak sulit, karena waktu pembuatan biasanya tidak disimpan di mana pun atau sulit didapat. Apa yang Anda miliki adalah mtime , atau waktu modifikasi terakhir, dan ctime yang merupakan waktu "perubahan", diperbarui pada setiap perubahan pada inode. Saya anggap Anda menginginkan waktu modifikasi.

Menemukan file yang dimodifikasi pada tanggal tertentu ternyata agak menarik, karena find tampaknya membuatnya agak sulit untuk melakukannya dengan benar dengan file yang dibuat tepat tengah malam.

Jika kita mengetahui waktu relatif (yaitu kemarin), kita dapat menggunakan find -daystart -mtime 1 , tetapi menemukan file diubah pada tengah malam yang salah, Aug 8 00:00 . Namun, ini sepertinya berhasil:

find dir/ -daystart -mtime +0 \! -mtime +1 -ls

Jika tidak ingin menghitung waktu relatif, dan find Anda memiliki -newerXY :

find dir/ -newermt 'Aug 7 00:00' \! -newermt 'Aug 8 00:00' -ls

Sekali lagi, ini membuat file yang dibuat tepat pada tengah malam salah, karena perbandingannya "lebih baru", bukan "lebih baru atau lebih tua". Meskipun jika sistem Anda memiliki presisi subdetik untuk stempel waktu, mungkin sulit untuk mencapainya, tetapi terjadi jika Anda menguji dengan file yang dibuat oleh touch ...

Solusi yang sulit untuk itu adalah seperti ini:

find dir/ -newermt 'Aug 6 23:59:59.999999999' \! -newermt 'Aug 7 23:59:59.999999999' -ls

Bagaimanapun, tambahkan -name "DBG_A_sql*" yang diperlukan untuk hanya mengambil file dengan nama yang benar. Anda dapat mengganti -ls di bagian akhir dengan -delete untuk menghapus file alih-alih daftar. (-ls , -delete dan -newerXY setidaknya ada di GNU find dan BSD find di OS X.)

Tentu saja Anda dapat mengurai representasi teks dari tanggal, tetapi ls membuatnya sulit untuk diperbaiki jika beberapa joker membuat file dengan karakter yang tidak dapat dicetak di dalamnya. Tentu, file contoh tidak memilikinya, tetapi secara umum, siapa pun dapat membuatnya, terutama di /tmp .

(Meskipun dengan | xargs rm Anda hanya akan melewatkan file-file itu, dan karena nama file tidak boleh berisi garis miring, akan sulit bagi siapa pun untuk mengarahkan rm Anda ke direktori lain.)


Hanya bash loop

for file in /tmp/DBG_A_sql* ; do
    [ "$(date -I -r "$file")" == "2016-08-07" ] && rm "$file"
done

Linux
  1. Cara Menemukan file besar linux dengan perintah find dan du

  2. Mendapatkan Semua File Yang Telah Dimodifikasi Pada Tanggal Tertentu?

  3. Bagaimana Cara Mendapatkan Hanya File yang Dibuat Setelah Berkencan Dengan Ls?

  1. Temukan file dan tar (dengan spasi)

  2. Menemukan file yang dapat dieksekusi menggunakan ls dan grep

  3. Menghapus file dengan rm menggunakan find dan xargs

  1. Temukan file dan direktori di Linux dengan perintah find

  2. Cara Menemukan File Dengan Izin SUID dan SGID di Linux

  3. Urutkan File Dalam Folder Tertentu Dengan Ranger?