GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:come eliminare i file creati tra due volte?

Ho una cartella in cui eseguo il backup dei miei database e voglio eliminare tutti i backup creati tra le 11:00 e le 15:00 e non importa che giorno sia:questo è il trucco!

Ho trovato questo comando molto utile, ma non nel mio caso d'uso:

find . -type f -newermt '01 nov 2018 00:00:00' -not -newermt '10 nov 2018 00:00:00' -delete

Ma qui mi costringe a un intervallo tra due date! Voglio eliminare solo i backup creati tra due orari specifici.

Risposta accettata:

Abbastanza semplicemente, dato che hai taggato linux, hai il stat comando disponibile, che estrarrà l'ora di modifica di un file e la date GNU comando, che estrarrà l'ora da una determinata ora:

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

Se i risultati sembrano corretti, allora:

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

Ecco un test eseguito con -ls versione:

$ 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

Ringraziamo Kusalananda per aver scritto l'eccellente risposta che ho seguito, a:Capire l'opzione -exec di `trova`

Tieni presente che non vuoi il {} + versione di find qui, come vogliamo il -exec risultati per file, in modo da eliminare solo i file che corrispondono all'intervallo di tempo.

Lo script della shell incorporata ha due parti principali:determinare il timestamp "ora" del file e quindi restituire l'esito positivo o negativo in base all'intervallo. La prima parte è essa stessa realizzata in due pezzi. Alla variabile viene assegnato il risultato della sostituzione del comando; il comando dovrebbe essere letto al rovescio:

  1. $(stat -c %Y "$1") — questa (seconda) sostituzione di comando chiama stat sul $1 parametro dello script di shell incorporato; $1 è stato assegnato da find come uno dei percorsi trovati. L'opzione %Y per stat il comando restituisce il tempo di modifica in secondi dall'epoca.
  2. date -d @ ... +%-H — questo prende i secondi dall'epoca dalla sostituzione del comando precedente e chiede date per darci la parte Ore di quel tempo; il @ la sintassi dice date che lo stiamo dando secondi dall'epoca come formato di input. Con il - opzione nel formato di output della data, diciamo alla data GNU di non riempire il valore con eventuali zeri iniziali. Ciò impedisce in seguito qualsiasi interpretazione errata dell'ottale.
Correlati:Debian Lenny:vuoi che Splashy inizi subito dopo Grub2?

Una volta ottenuto il $h Assegnata la variabile dell'ora, utilizziamo l'operatore condizionale di bash [[ per chiedere se quel valore è maggiore o uguale a 11 e anche rigorosamente inferiore a 15.


Linux
  1. Come trasferire file tra due computer utilizzando i comandi nc e pv

  2. Come eliminare file ENORMI (100-200 GB) in Linux

  3. Come rinominare i file in Linux

  4. Come eliminare file e directory in Linux dalla riga di comando

  5. Come creare file di una certa dimensione in Linux

Come utilizzare il comando Date negli script Bash in Linux

Come visualizzare due file affiancati in Linux

Come confrontare due file nel terminale Linux

Come sincronizzare automaticamente i file tra due server Linux

Come rimuovere/eliminare file in Linux usando il comando rm

Come contare i file nella directory su Linux