Posts Tagged tips and tricks
rsync: cannot delete non-empty directory
Posted by wireman in Craftsmanship on October 19, 2009
A p (modifier) indicates that an (include/exclude/...) rule is perishable, meaning that it is ignored in directories that are being deleted. (из man rsync)
Има няколко причини, поради които rsync може да ви върне следната грешка:
cannot delete non-empty directory: some_dir_name
- Ако сте използвали
-bили--backup. Тогаваrsyncне трие нищо отdestination. За да модифицирате това поведение, вижте описанието на--backupвman rsync. - Ако ползвате
--excludeправила. Тези правила “предпазват” файлове вdestinationот изтриване, от което следва, че папка, изтрита вsourceняма да може да бъде изтрита вdestination, ако съдържа “предпазени” от правилата файлове, дори да сте задали--delete --force. Решението е да дефиниратеexclude-правилото като perishable.Например, ако синхронизирате директориите
sourceиdestination, които са подsubversion-контрол сrsync, можете да ползвате следната команда:rsync -rv --delete --force --filter 'exclude,p .svn' 'source' 'destination'
В случя избягваме синхронизирането на системните за
subversionдиректории.svn, като въпреки това твърдим, че правилото, “защитаващо”.svn-директориите от прехвърляне, не важи в директории, които подлежат на изтриване (т.е. правилото е perishable).
За повече информация, вижте секцията FILTER RULES и потърсете вътре за “perishable” в man rsync.
PHP-функции any() и all()
Posted by wireman in Craftsmanship, General on August 13, 2009
Потрябва ми удобството на тези две хубави функции, all() и any(), каквито например ги има в Пайтън. Въпреки богатата база от функции в PHP, бързото ми търсене не показа нищо подобно, което да е вградено, затова:
function all() {
$args = func_get_args();
if (count($args) == 1 && is_array($args[0])) {
return call_user_func_array(__FUNCTION__, $args[0]);
}
foreach ($args as $value) {
if (!$value) {
return false;
}
}
return count($args) > 0;
}
Функцията any() е почти аналогична. Ако ви интересува и нейната пълна реализация, както и нещо като unit-тест, вижте пълния текст на този пост.
Чакалене на IP/host за наличие на пинг
Posted by wireman in Craftsmanship, General on August 12, 2009
Съвсем скоро (да кажем, преди 10 минути) ми се наложи да чакам да се появи пинг към дадено IP. За целта си написах shell-скриптчето, показано по-долу, което да ми “каже” нещо, в момента, в който се появи ping към съответното IP. Някой може да го намери за полезно:
dimitardimitrov@Midori:~$ cat monitor-host.sh #!/bin/bash if [ "$#" -lt 1 ] then echo "Usage: $0 host.to.monitor" exit 1 fi host="$1" while true do ping -c 1 $host if [ "$?" -eq "0" ] then say The host is now online! I repeat: "The host is now online!". exit fi sleep 1 done
За да работи, е необходимо да имате команда say, която да прави каквото се очаква :) Може да бъде заменена и с нещо друго, разбира се. Чувствайте се свободни да ползвате това парче “код” както искате.