*
contendo um caractere curinga não citado (sendo ele próprio um caractere curinga), é considerado como glob e expandido pelo shell na lista de arquivos que correspondem a esse padrão.
Esse padrão específico ( *
), corresponde a qualquer nome de arquivo não oculto, portanto, antes de chamar find
, o shell o expandirá para a lista de arquivos não ocultos no diretório atual, portanto, se o diretório atual contém um arquivo chamado foo
e outro chamado foo bar
, ele chamará find
com esses argumentos:
"find", "/etc/", "foo", "foo bar"
Se não houver nenhum arquivo não oculto no diretório atual, o comportamento varia entre os shells. csh
, tcsh
, fish
, zsh
emitirá uma mensagem de erro no match e não executará o comando, enquanto as shells POSIX ainda chamarão find
mas com o padrão não expandido . Então, naqueles, find
será chamado com esses argumentos:
"find", "/etc/", "*"
(que está pedindo para o find
encontrar todos os arquivos em /etc/
e em *
(que neste caso não existe)). Muito provavelmente, no RedHat, você está chamando esse comando de um diretório que contém arquivos não ocultos, enquanto no Debian, você está chamando de que contém apenas arquivos ocultos.
A propósito
cat $(find /etc/ *) 2>/dev/null | grep $(hostname)
está errado.
Você deve escrever:
find /etc -type f -exec cat {} + | grep -Fe "$(hostname)"
Ou provavelmente mais útil:
find /etc -type f -exec grep -Fe "$(hostname)" {} +
Ou porque tanto o Debian quanto o RedHat possuem o GNU grep:
grep -rFe "$(hostname)" /etc