Puoi usare find
. Calcola la data in base alle tue esigenze e al tuo utilizzo,
find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -print
Dopo averlo confermato, eliminali,
find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -delete
Per cominciare, trovare i file creati in un certo momento è un po' difficile, dal momento che il tempo di creazione di solito non viene salvato da nessuna parte o è difficile da ottenere. Quello che hai è mtime
, o l'ora dell'ultima modifica, e ctime
che è il tempo di "modifica", aggiornato su eventuali modifiche all'inode. Suppongo che tu voglia l'ora di modifica.
Trovare file modificati in una data data si è rivelato leggermente interessante, dal find
sembra rendere un po 'difficile farlo bene con i file creati esattamente a mezzanotte.
Se conosciamo l'ora relativa (cioè era ieri), potremmo usare find -daystart -mtime 1
, ma trova il file modificato alla mezzanotte sbagliata, Aug 8 00:00
. Tuttavia, questo sembra funzionare:
find dir/ -daystart -mtime +0 \! -mtime +1 -ls
Se non vuoi calcolare il tempo relativo, e il tuo find
ha -newerXY
:
find dir/ -newermt 'Aug 7 00:00' \! -newermt 'Aug 8 00:00' -ls
Ancora una volta, questo sbaglia i file creati esattamente a mezzanotte, perché il confronto è "più recente", non "più nuovo o vecchio come". Tuttavia, se il tuo sistema ha una precisione inferiore al secondo per i timestamp, potrebbe essere difficile raggiungerlo, ma succede se esegui il test con i file creati da touch
...
Una soluzione pelosa sarebbe qualcosa del genere:
find dir/ -newermt 'Aug 6 23:59:59.999999999' \! -newermt 'Aug 7 23:59:59.999999999' -ls
In ogni caso, aggiungi il necessario -name "DBG_A_sql*"
prendere solo i file con il nome corretto. Puoi sostituire -ls
alla fine con -delete
per eliminare i file invece di elencarli. (-ls
, -delete
e -newerXY
esistono almeno in GNU find e BSD find su OS X.)
Ovviamente potresti effettivamente analizzare la rappresentazione testuale della data, ma ls
rende difficile ottenere risultati corretti se qualche burlone crea file con caratteri non stampabili al loro interno. Certo, i file di esempio non ne hanno, ma in generale chiunque potrebbe crearli, specialmente in /tmp
.
(Anche se con | xargs rm
ti mancherebbero solo quei file, e dato che i nomi dei file non possono contenere barre, sarebbe difficile per chiunque indicare il tuo rm
in un'altra directory.)
Solo bash loop
for file in /tmp/DBG_A_sql* ; do
[ "$(date -I -r "$file")" == "2016-08-07" ] && rm "$file"
done