Existem dois problemas diferentes.
O primeiro é que você não está citando suas variáveis: isso acaba fazendo stat falhar por esse motivo:
-
search $1 $2 $3 deve ser search "$1" "$2" "$3" ;
-
for elem in $1/* deve ser for elem in "$1"/* ;
-
owner='stat --format "%s" $1' deve ser owner='stat --format "%s" "$1"' ;
-
size='stat --format "%U" $1' deve ser size='stat --format "%U" "$1"' ;
-
search "$elem" $2 $3 deve ser search "$elem" "$2" "$3" .
O segundo é quando um diretório vazio é alcançado durante a recursão, a expansão de for element in $1/* falha e os dois comandos stat são chamados em /path/to/empty/directory/* , o que não existe:
% bash script.sh /home/user user 0
stat: cannot stat ‘/home/user/Documenti/Musica/*’: No such file or directory
stat: cannot stat ‘/home/user/Documenti/Musica/*’: No such file or directory
stat: cannot stat ‘/home/user/Documenti/My Games/*’: No such file or directory
stat: cannot stat ‘/home/user/Documenti/My Games/*’: No such file or directory
stat: cannot stat ‘/home/user/Documenti/Video/*’: No such file or directory
stat: cannot stat ‘/home/user/Documenti/Video/*’: No such file or directory
stat: cannot stat ‘/home/user/home/user/*’: No such file or directory
stat: cannot stat ‘/home/user/home/user/*’: No such file or directory
stat: cannot stat ‘/home/user/Modelli/*’: No such file or directory
stat: cannot stat ‘/home/user/Modelli/*’: No such file or directory
stat: cannot stat ‘/home/user/Musica/*’: No such file or directory
stat: cannot stat ‘/home/user/Musica/*’: No such file or directory
stat: cannot stat ‘/home/user/Pubblici/*’: No such file or directory
stat: cannot stat ‘/home/user/Pubblici/*’: No such file or directory
stat: cannot stat ‘/home/user/Video/*’: No such file or directory
stat: cannot stat ‘/home/user/Video/*’: No such file or directory
%
Uma maneira de corrigir isso seria verificar se o arquivo / diretório existe antes de chamar display_owner_and_size , de modo a ignorar a iteração atual se estivermos tentando stat / percorrer um diretório que não existe (já que o diretório está vazio não há razão para stat seu conteúdo nem para continuar percorrendo esse ramo da árvore):
[ -e "$elem" ] && display_owner_and_size "$elem" || continue
Além disso, outros erros são:
-
owner='stat --format "%s" "$1"' deve ser owner='stat --format "%U" "$1"' e size='stat --format "%U" "$1"' deve ser size='stat --format "%s" "$1"' ;
- Você não pode usar
> para fazer comparações numéricas. Use -gt : if [[ $owner == $2 && $size -gt $3 ]] .
Assim, o script corrigido seria:
#!/bin/bash
owner="valdsilviufarcas"
size=0
function display_owner_and_size()
{
owner='stat --format "%U" "$1"'
size='stat --format "%s" "$1"'
}
function search()
{
for elem in "$1"/*
do
[ -e "$elem" ] && display_owner_and_size "$elem" || continue
if [[ $owner == $2 && $size -gt $3 ]]
then
echo $elem
fi
if test -d "$elem"
then
search "$elem" "$2" "$3"
fi
done
}
search "$1" "$2" "$3"