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 o chown, que vê esses arquivos, e altera as permissões nos arquivos que vê, e é isso.
Lembre-se, em shells, o glob é avaliado pelo shell, não pelo comando. Se o glob corresponder aos arquivos, eles serão passados para o comando e o comando nunca saberá que um glob existiu. (Isso é diferente de como o prompt de comando do Windows costumava fazer as coisas). Se você tem um diretório, com o conteúdo parecido com:
machine:$ ls -F
file1.pdf file2.pdf other.txt subdir/
E você digitou:
chown -R someuser:somegroup *.pdf
O shell primeiro faria a lista: file1.pdf file2.pdf
e, em seguida, execute seu comando:
chown -R someuser:somegroup file1.pdf file2.pdf
Veja, não há diretório para -R para agir. Ele faz o que você pediu - altere a propriedade dos dois arquivos na linha de comando, ignorando o peculiar sinalizador -R.
Para fazer o que você deseja, usar o '* .pdf' como um 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 '.' para procurar arquivos (filetype f) do padrão de nome '*.pdf'
, em seguida, passa para xargs, que constrói uma linha de comando para chmod. Observe as aspas em torno do padrão '*.pdf'
, lembre-se de que o shell criará um glob se puder, mas você deseja que o padrão seja passado para find
, portanto, é necessário citá-lo.
Como nomes de arquivos podem ter espaços, você deve usar um truque para tornar o nome do arquivo com espaços seguro:
find . -type f -name '*.pdf' -print0 | xargs -0 chown someuser:somegroup
No bash 3 e inferior, é assim que você precisa fazer isso. Um globbing mais poderoso está disponível no bash 4 (com shopt -s globstar
) e outros shells. O mesmo em zsh, usando um globo recursivo **
:
chown -R someuser:somegroup ./**/*.pdf