Primeiro, o extglob controla o que ls vê em sua linha de comando. Não não controla o que o ls faz com o que vê na linha de comando. Isso é importante porque a opção -R para ls diz a ls para explorar recursivamente os diretórios que ele vê na linha de comando. Portanto, mesmo que os diretórios *uploads* não sejam fornecidos explicitamente na linha de comando, ls os encontrará quando explorar seus diretórios pai.
Segundo, como você sabe, não analise ls . A saída de ls não é para uso em pipelines ou scripts. Tentar usá-lo dessa maneira acaba levando à infelicidade.
Em terceiro lugar, para obter os arquivos desejados, tente:
find ./public_html ! -path '*uploads*'
Para explicar:
-
O
./public_htmlinforma ao localizar para começar a procurar no diretório./public_html. -
Por si só, a opção
-path '*uploads*'corresponde a qualquer caminho que contenha o padrão*uploads*. (-pathé semelhante à opção-namedo find, maspathinclui os nomes dos diretórios.) O!anterior, no entanto, indica negação. Portanto, a opção! -path '*uploads*'exclui qualquer caminho que corresponda a*uploads*.
Para obter a saída do estilo ls enquanto ainda estiver usando os recursos de find , considere:
find ./public_html ! -path '*uploads*' -exec ls -dalh {} +