El modo recursivo solo funciona en directorios, no en archivos. Al usar el glob '* .pdf', el shell pasa la lista de archivos a chown, que ve que son archivos y cambia los permisos en los archivos que ve, y eso es todo.
Recuerde, en shells, el glob es evaluado por el shell, no por el comando. Si el glob coincide con los archivos, se pasan al comando y el comando nunca sabe que existe un glob. (Esto es diferente de cómo el símbolo del sistema de Windows solía hacer cosas). Si tiene un directorio, con los contenidos algo así como:
machine:$ ls -F
file1.pdf file2.pdf other.txt subdir/
Y escribiste:
chown -R someuser:somegroup *.pdf
El shell primero haría la lista: file1.pdf file2.pdf
y luego ejecuta tu comando:
chown -R someuser:somegroup file1.pdf file2.pdf
Mira, no hay un directorio para que -R actúe. Hace lo que le pediste: cambiar la propiedad de los dos archivos en la línea de comando, ignorando esa peculiar bandera -R.
Para hacer lo que quiera, para usar el '* .pdf' como patrón para este directorio y subdirectorios, puede usar find
, que puede encontrar archivos que coincidan con un patrón de nombre de archivo (o muchos otros criterios) y pasar a un subcomando
find . -type f -name '*.pdf' | xargs chown someuser:somegroup
Esto comienza en el directorio actual '.' para buscar archivos (tipo de archivo f) del patrón de nombre '*.pdf'
luego pasa a xargs, que construye una línea de comando para chmod. Observe las comillas alrededor del patrón '*.pdf'
, recuerde que el shell creará un globo si puede, pero desea que se pase el patrón find
, por lo que debe citarlo.
Debido a que los nombres de archivo pueden tener espacios, debe usar un truco para que sea seguro para nombre de archivo con espacios:
find . -type f -name '*.pdf' -print0 | xargs -0 chown someuser:somegroup
En bash 3 y versiones inferiores, esta es la forma en que debe hacerlo. Se dispone de un engrosamiento más potente en bash 4 (con shopt -s globstar
) y otros proyectiles. Lo mismo en zsh, usando un globo recursivo **
:
chown -R someuser:somegroup ./**/*.pdf
shopt -s globstar
hace recursive globbing.