O modo recursivo funciona apenas em diretórios, não em arquivos. Usando o glob '* .pdf', o shell está passando a lista de arquivos para chown, que vê esses arquivos, e altera as permissões nos arquivos que vê, e é isso.
Lembre-se, nas conchas, a glob é avaliada pelo shell, não pelo comando. Se o glob corresponder aos arquivos, eles são passados para o comando e o comando nunca sabe que um glob existia. (É diferente de como o prompt de comando do Windows costumava fazer as coisas). Se você tem um dir, com o conteúdo algo como:
machine:$ ls -F
file1.pdf file2.pdf other.txt subdir/
E você digitou:
chown -R someuser:somegroup *.pdf
O shell faria primeiro a lista: file1.pdf file2.pdf
e execute o seu comando:
chown -R someuser:somegroup file1.pdf file2.pdf
Veja, não há diretório para o -R atuar. Ele faz o que você pediu - altere a propriedade dos dois arquivos na linha de comando, ignorando o sinalizador -R peculiar.
Para fazer o que você deseja, use o '* .pdf' como padrão para este diretório e subdiretórios, você pode usar find
, que pode encontrar arquivos que correspondam a um padrão de nome de arquivo (ou muitos outros critérios) e passar para um subcomando
find . -type f -name '*.pdf' | xargs chown someuser:somegroup
Isso começa no diretório atual '.' procurar arquivos (tipo de arquivo f) do padrão de nome '*.pdf'
passa para xargs, que constrói uma linha de comando para chmod. Observe as aspas ao redor do padrão '*.pdf'
, lembre-se de que o shell criará um globo, se puder, mas você deseja que o padrão seja passado find
, então você precisa citá-lo.
Como os nomes de arquivos podem ter espaços, você deve usar um truque para torná-lo seguro com nome de arquivo com espaços:
find . -type f -name '*.pdf' -print0 | xargs -0 chown someuser:somegroup
No bash 3 e inferior, é dessa maneira que você precisa fazer isso. Globbing mais poderoso está disponível no bash 4 (com shopt -s globstar
) e em outros reservatórios. O mesmo no zsh, usando um globo recursivo **
:
chown -R someuser:somegroup ./**/*.pdf
shopt -s globstar
faz globbing recursivo.