Programaría el trabajo cron para que se ejecutara todos los días. Entonces el script puede decidir si el día -del año -es un número par :si no, salir.
import datetime
today = datetime.date.today()
doy = int(today.strftime("%j"))
if (doy % 2 == 1): exit()
...
Вы можете быть уверены, что имя файла никогда не будет иметь /
. Поэтому достаточно сделать:
$0=~/([^\/]+)$/;
my $this = $1;
print "my name is $this\n";
Все остальное (, кроме \0
), является честной игрой в имени файла. Таким образом, ваш подход пропустил бы такое сумасшедшее имя файла:
th&is%sc(ip)tHas
a^really#weird"+Name=!
И да, вы можете создать файл с таким именем:
$ touch 'th&is%sc(ip)tHas'$'\n'$'\t''a^really#weird"+Name=!'
$ ls -l *Nam*
-rw-r--r-- 1 terdon terdon 0 Jul 5 16:00 'th&is%sc(ip)tHas'$'\n\t''a^really#weird"+Name=!'
Но Perl может с этим справиться. Я сохранил строки выше с этим ужасным именем и запустил:
$ perl *Nam*
my name is th&is%sc(ip)tHas
a^really#weird"+Name=!
Ваша первоначальная версия потерпела бы неудачу с:
$ perl *Nam*
Use of uninitialized value $this in concatenation (.) or string at th&is%sc(ip)tHas
a^really#weird"+Name=! line 7.
my name is
Это потому, что[\w\.\-\_]
1 не соответствует ни одному из символов(&%()^#"+=!
)или пробелу в имени.
1Между прочим, вам не нужно убегать от большинства из них. Просто используйте [\w.\-_]
.