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
má -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