GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menghapus file yang dibuat antara dua kali?

Cukup sederhana, mengingat Anda menandai linux, Anda memiliki stat tersedia, yang akan mengekstrak waktu modifikasi file, dan GNU date perintah, yang akan mengekstrak jam dari waktu tertentu:

find . -type f -exec sh -c '
  h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' \
  sh {} \; -ls

Jika hasilnya terlihat benar, maka:

find . -type f -exec sh -c '
  h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' \
  sh {} \; -delete

Ini adalah uji coba dengan -ls versi:

$ touch -d 'Wed Sep 12 11:00:01 EDT 2018' 11am
$ touch -d 'Wed Sep 12 12:00:02 EDT 2018' 12pm
$ touch -d 'Wed Sep 12 15:00:03 EDT 2018' 303pm
$ find . -type f -exec sh -c 'h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' sh {} \; -ls
1705096    0 -rw-r--r--   1 user group 0 Sep 12  2018 ./11am
1705097    0 -rw-r--r--   1 user group 0 Sep 12  2018 ./12pm

Penghargaan untuk Kusalananda karena telah menulis jawaban luar biasa yang saya ikuti, di:Memahami opsi -exec dari `find`

Perhatikan bahwa kami tidak ingin {} + versi find di sini, karena kita menginginkan -exec hasil menjadi per-file, sehingga kami hanya menghapus file yang sesuai dengan rentang waktu.

Skrip shell tersemat memiliki dua bagian utama:tentukan stempel waktu "jam" file dan kemudian kembalikan keberhasilan atau kegagalan berdasarkan rentang. Bagian pertama itu sendiri dilakukan dalam dua bagian. Variabel diberikan hasil dari substitusi perintah; perintah harus dibaca luar-dalam:

  1. $(stat -c %Y "$1") -- substitusi perintah (kedua) ini memanggil stat pada $1 parameter skrip shell tertanam; $1 ditugaskan oleh find sebagai salah satu nama jalur yang ditemukannya. Opsi %Y ke stat perintah mengembalikan waktu modifikasi dalam detik-sejak-Epoch.
  2. date -d @ ... +%-H -- ini mengambil detik-sejak-zaman dari substitusi perintah di atas dan meminta date untuk memberi kami bagian Jam dari waktu itu; @ sintaks memberitahu date bahwa kami memberikannya detik-sejak-zaman sebagai format masukan. Dengan - dalam format keluaran tanggal, kami memberi tahu tanggal GNU untuk tidak pad nilai dengan angka nol di depan. Hal ini mencegah salah interpretasi oktal di kemudian hari.

Setelah kita memiliki $h Variabel jam ditetapkan, kami menggunakan operator bersyarat bash [[ untuk menanyakan apakah nilai itu lebih besar dari atau sama dengan 11 dan juga kurang dari 15.


Linux
  1. Linux – Bagaimana Cara Menghapus File yang Dibuat Antara Dua Kali?

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

  3. Garis Umum Antara Dua File?

  1. Bagaimana Anda menghapus file yang lebih lama dari tanggal tertentu di Linux?

  2. Bagaimana cara menggabungkan dua file CSV?

  3. Cara menyalin file dalam jumlah besar dengan cepat antara dua server

  1. Cara Mentransfer File Antara Dua Komputer menggunakan Perintah nc dan pv

  2. Cara Menggabungkan Dua File Teks di Linux

  3. Bagaimana cara menghapus file .fuse_hidden*?