Não só copiará cada arquivo em seu diretório atual, mas também lhe dirá que não está copiando o diretório source
. Esta linha
foreach filename (* $1)
é de fato o problema, deveria ser:
foreach filename ("$1"/*)
(aspas são necessárias caso seu primeiro argumento contenha espaços).