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_html
informa 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-name
do find, maspath
inclui 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 {} +