.
This commit is contained in:
commit
aae369b9c8
9 changed files with 334 additions and 0 deletions
89
pipeshare-clean.c
Normal file
89
pipeshare-clean.c
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
#include <sys/stat.h>
|
||||
#include <dirent.h>
|
||||
#include <unistd.h>
|
||||
#include <libowfat/errmsg.h>
|
||||
#include <libowfat/array.h>
|
||||
#include <limits.h>
|
||||
#include <libowfat/str.h>
|
||||
#include <libowfat/buffer.h>
|
||||
#include <time.h>
|
||||
|
||||
#define dieusage() die(100,argv0," [-C dir]")
|
||||
#define dienoarg(OPT) \
|
||||
do { \
|
||||
carp("missing argument for -"OPT); \
|
||||
dieusage(); \
|
||||
} while(0)
|
||||
|
||||
static time_t now,expiration;
|
||||
|
||||
static int prompt_confirm(char *file)
|
||||
{
|
||||
char c;
|
||||
buffer_puts(buffer_1,"remove ");
|
||||
buffer_puts(buffer_1,file);
|
||||
buffer_putsflush(buffer_1,"? [y/N]");
|
||||
if (read(0,&c,1)<=0) return 0;
|
||||
return c=='y' || c=='Y';
|
||||
}
|
||||
|
||||
static void delete_shared(char *id)
|
||||
{
|
||||
DIR *dir;
|
||||
struct dirent *ent;
|
||||
dir=opendir(".");
|
||||
if (!dir) diesys(111,"opendir");
|
||||
while ((ent=readdir(dir)))
|
||||
if (str_start(ent->d_name,id))
|
||||
unlink(ent->d_name);
|
||||
closedir(dir);
|
||||
}
|
||||
|
||||
static void run(void)
|
||||
{
|
||||
DIR *dir;
|
||||
struct dirent *ent;
|
||||
struct stat st;
|
||||
dir=opendir(".");
|
||||
if (!dir) diesys(111,"opendir");
|
||||
while ((ent=readdir(dir))) {
|
||||
if (str_chr(ent->d_name,'.')!=str_len(ent->d_name))
|
||||
continue;
|
||||
if (stat(ent->d_name,&st)<0)
|
||||
diesys(111,"stat ",ent->d_name);
|
||||
/* ignore alias */
|
||||
if (now-st.st_mtime > expiration) {
|
||||
if (!prompt_confirm(ent->d_name))
|
||||
continue;
|
||||
buffer_putsflush(buffer_1,"\n");
|
||||
delete_shared(ent->d_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
char *dir=".";
|
||||
errmsg_iam(*argv);
|
||||
for (i=1;i<argc;i++) {
|
||||
if (argv[i][0]!='-') break;
|
||||
if (argv[i][1]=='-' && !argv[i][2]) break;
|
||||
switch (argv[i][1]) {
|
||||
case 'C':
|
||||
if(!argv[++i]) dienoarg("C");
|
||||
dir=argv[i];
|
||||
break;
|
||||
default: dieusage();
|
||||
}
|
||||
}
|
||||
argc-=i; argv+=i;
|
||||
|
||||
if (chdir(dir)<0)
|
||||
diesys(100,"chdir ",dir);
|
||||
|
||||
time(&now);
|
||||
/* 14 days */
|
||||
expiration = 14*60*60*24;
|
||||
run();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue