GNU/Linux >> Linux Esercitazione >  >> Linux

Ricerca ed eliminazione di file con una data specifica

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

Linux
  1. Ottenere tutti i file che sono stati modificati in una data specifica?

  2. Ordinare i file in una cartella specifica con Ranger?

  3. Trova e copia i file

  4. trova e rimuovi i file con spazio usando il comando trova su Linux

  5. Utilizzo di find e tar con file con caratteri speciali nel nome

Trova file e directory su Linux con il comando find

Come trovare una stringa o una parola specifica in file e directory

Trova comando in Linux (Trova file e directory)

Come trovare ed elencare in modo ricorsivo i file per data in Linux

Trova i file persi con Scalpel

Trova facilmente file e directory su Linux