GNU/Linux >> Znalost Linux >  >> Linux

Hledání a mazání souborů s konkrétním datem

Můžete použít find . Vypočítejte datum podle vašeho požadavku a použití,

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

Po potvrzení je smažte

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

Pro začátek vyhledejte vytvořené soubory v určitý čas je trochu těžké, protože čas vytvoření se obvykle nikde neukládá nebo je těžké se k němu dostat. To, co máte, je mtime , nebo čas poslední úpravy a ctime což je čas "změny", aktualizovaný při jakýchkoli změnách inode. Předpokládám, že chcete čas změny.

Hledání souborů upravených k danému datu se ukázalo být mírně zajímavé, protože find Zdá se, že je trochu obtížné to udělat správně se soubory vytvořenými přesně o půlnoci.

Pokud známe relativní čas (tj. bylo to včera), mohli bychom použít find -daystart -mtime 1 , ale najde soubor upravený v nesprávnou půlnoc, Aug 8 00:00 . Zdá se však, že to funguje:

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

Pokud nechcete vypočítat relativní čas, a váš find-newerXY :

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

Opět se tím pletou soubory vytvořené přesně o půlnoci, protože srovnání je „novější“, nikoli „novější nebo stejně staré jako“. Pokud má váš systém přesnost pro časová razítka na subsekundu, může být těžké to dosáhnout, ale stane se to, pokud testujete se soubory vytvořenými touch ...

Chlupaté řešení by bylo asi toto:

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

V každém případě přidejte potřebné -name "DBG_A_sql*" vzít pouze soubory se správným názvem. Můžete nahradit -ls na konci s -delete k odstranění souborů místo výpisu. (-ls , -delete a -newerXY existují alespoň v GNU find a BSD find na OS X.)

Samozřejmě můžete ve skutečnosti analyzovat textovou reprezentaci data, ale ls ztěžuje nalezení správného postupu, pokud nějaký vtipálek vytvoří soubory s netisknutelnými znaky. Vzorové soubory samozřejmě žádné takové nemají, ale obecně je může vytvořit kdokoli, zejména v /tmp .

(I když s | xargs rm jen byste ty soubory minuli, a protože názvy souborů nemohou obsahovat lomítka, bylo by pro někoho těžké ukázat váš rm do jiného adresáře.)


Jen bash loop

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

Linux
  1. Seřadit soubory v konkrétní složce pomocí Ranger?

  2. Najděte a zkopírujte soubory

  3. Najít soubory a rozbalit je (s mezerami)

  1. Hledání spustitelných souborů pomocí ls a grep

  2. Rekurzivně vyhledejte soubory s konkrétní příponou

  3. Jak najdu všechny soubory a adresáře, do kterých lze zapisovat konkrétním uživatelem?

  1. Najděte soubory a adresáře v Linuxu pomocí příkazu find

  2. Jak najít soubory s oprávněními SUID a SGID v Linuxu

  3. Jak najít velké soubory linux pomocí příkazů find a du