έχω ένα server (Linux) όπου έχει διάφορους λογαρισμούς και ο κάθε χρήστης στέλνει στον φάκελο του το backup του. Αυτό γίνεται κάθε περίπου 15 μέρες. Ψάχνω script που θα κρατάει μόνο τα τελευταία 5 αρχεία και θα κάνει delete τα υπόλοιπα.
προσπαθώ να τροποποιήσω το delete older than x days πχ 5 μέρες, αλλά δεν μου βγαίνει για αριθμό αρχείων.Κώδικας:find /path/to/files* -mtime +5 -exec rm {} \;
γνωρίζει κανείς κάποιο script ή άλλο τρόπο να το κάνω?
Εμφάνιση 1-11 από 11
-
11-02-22, 11:57 backup & keep only 5 files #1
-
11-02-22, 12:41 Απάντηση: backup & keep only 5 files #2
python??
από stack overflow:
Κώδικας:from pathlib import Path import arrow filesPath = r"C:\scratch\removeThem" criticalTime = arrow.now().shift(hours=+5).shift(days=-7) for item in Path(filesPath).glob('*'): if item.is_file(): print (str(item.absolute())) itemTime = arrow.get(item.stat().st_mtime) if itemTime < criticalTime: #remove it pass
-
11-02-22, 13:00 Απάντηση: backup & keep only 5 files #3
αν και θα προτιμούσα bash script.
κρατάει μόνο τα τελευταία 5 αρχεία? ή των τελευταίων 5 ημερών? θέλω τα τελευταία 5 αρχεία
-
11-02-22, 15:00 Απάντηση: backup & keep only 5 files #4NetBSD Rocks!
http://www.netbsd.org
-
11-02-22, 16:00 Απάντηση: backup & keep only 5 files #5
ειναι αρχεία τύπου tar, zip txt, rsc. ανάλογα από τι σύστημα το τραβάει.
-
11-02-22, 16:53 Απάντηση: backup & keep only 5 files #6
Όλα αυτά τα αρχεία έχουν την ημερομηνία στο filename σαν suffix;
Π.χ. my_20220211.zip
Πως τα ομαδοποιείς, για να κρατήσεις τα 5 τελευταία;NetBSD Rocks!
http://www.netbsd.org
-
11-02-22, 16:57 Απάντηση: backup & keep only 5 files #7
για να το κάνω πιο ευκολο, ας πουμε ότι είναι ενός τύπου πχ my_20220211.zip
-
11-02-22, 19:45 Απάντηση: backup & keep only 5 files #8
Δοκίμασε το oneliner:
Κώδικας:perl -e '@f = <*.*>; foreach(@f) { $key = $_; $key =~ s/^(.*)_\d{8}(\..*)$/$1$2/; if (! exists $h{$key}) { $h{$key} = [$_]; } else { push(@{$h{$key}}, $_); } } foreach $k(keys %h) { $s = @{$h{$k}}; if($s > 5) { $t = $s - 5; while($t--) { unlink shift(@{$h{$k}}); } } }'
Τελευταία επεξεργασία από το μέλος euri : 11-02-22 στις 21:09. Αιτία: προσθήκη του [code] tag
NetBSD Rocks!
http://www.netbsd.org
-
11-02-22, 21:00 Απάντηση: backup & keep only 5 files #9Κώδικας:
% ls keep5.sh* my_20210225.zip my_20211225.zip my_20220210.zip my_20210105.zip my_20211220.zip my_20220209.zip my_20220211.zip % cat keep5.sh #!/bin/zsh PURGE_ZIPFILES_AFTER="5"
#FOUND_ZIPFILES=( my_*(#qn) )FOUND_ZIPFILES=( my_*(oa) ) rm -v ${FOUND_ZIPFILES[0,-${PURGE_ZIPFILES_AFTER} - 1]} % ./keep5.sh removed 'my_20210105.zip' removed 'my_20210225.zip' % ls keep5.sh* my_20211225.zip my_20220210.zip my_20211220.zip my_20220209.zip my_20220211.zip
Κώδικας:my_*
Κώδικας:my_*(#qn)
Κώδικας:FOUND_ZIPFILES=( my_*(#qn) )
Κώδικας:rm -v ${FOUND_ZIPFILES[0,-${PURGE_ZIPFILES_AFTER} - 1]}
Τελευταία επεξεργασία από το μέλος imitheos : 12-02-22 στις 10:37.
"I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
11-02-22, 21:00 Απάντηση: backup & keep only 5 files #10
Μπορεις να κανεις πολλα πραγματα. Αλλη μια λυση θα ηταν να φτιαξεις watched folder καθε πεμπτο αρχειο που δημιουργειται θα σβηνεις το πρωτο.
-
12-02-22, 13:25 Απάντηση: backup & keep only 5 files #11
Αφού εξήγησε ο imitheos πως δουλεύει το script του, ας εξηγήσω και εγώ πως δουλεύει το δικό μου.
Κώδικας:@f = <*.*>;
Κώδικας:foreach(@f) { $key = $_; $key =~ s/^(.*)_\d{8}(\..*)$/$1$2/; if (! exists $h{$key}) { $h{$key} = [$_]; } else { push(@{$h{$key}}, $_); } }
Κώδικας:s/^(.*)_\d{8}(\..*)$/$1$2/
dummy.txt
my_20220110.zip
my_20220111.zip
my_20220112.zip
my_20220210.xlsx
my_20220211.xlsx
Το hash μου, μόλις τελειώσει το loop, θα είναι σαν να έκανα την ανάθεση:
Κώδικας:%h = ( dummy.txt => ["dummy.txt"], my.zip => ["my_20220110.zip", "my_20220111.zip", "my_20220112.zip"], my.xlsx => ["my_20220210.xlsx", "my_20220211.xlsx"] );
Για το τέλος έχουμε:
Κώδικας:foreach $k(keys %h) { $s = @{$h{$k}}; if($s > 5) { $t = $s - 5; while($t--) { unlink shift(@{$h{$k}}); } } }'
Αν όμως ήθελα να γίνω πιο σοφιστικέ και να παίξω με modification time, θα μπορούσα να σορτάρω το array πριν το while, με τον αγαπημένο μου spaceship operator
Κώδικας:@sa = sort{ -M $b <=> -M $a } @{$h{$k}};
Κώδικας:perl -e '@f = <*.*>; foreach(@f) { $key = $_; $key =~ s/^(.*)_\d{8}(\..*)$/$1$2/; if (! exists $h{$key}) { $h{$key} = [$_]; } else { push(@{$h{$key}}, $_); } } foreach $k(keys %h) { $s = @{$h{$k}}; if($s > 5) { $t = $s - 5; @sa = sort{ -M $b <=> -M $a } @{$h{$k}}; while($t--) { unlink shift(@sa); } } }'
Φυσικά, το παραπάνω script είναι cross-platform. Καλωσορίσατε στον μαγικό κόσμο της perl.NetBSD Rocks!
http://www.netbsd.org
Bookmarks