El modo recursivo sólo funciona en los directorios, no en los archivos. Usando el glob ‘*.pdf’ el shell pasa la lista de archivos a chown, que ve que son archivos, y cambia los permisos de los archivos que ve, y eso es todo.
Recuerda, en los shells, el glob es evaluado por el shell, no por el comando. Si la glob coincide con los archivos, se pasan al comando y el comando nunca sabe que existió una glob. (Esto es diferente a como el símbolo del sistema de comandos de Windows solía hacer las cosas). Si tienes un dir, con el contenido algo 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 ejecutaría 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 comandos, ignorando esa extraña bandera -R.
Para hacer lo que quieras, usa el ‘*’. pdf’ como patrón para este directorio y subdirectorios, puedes 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 actual dir ‘.’ para buscar archivos (tipo de archivo f) de nombre patrón '*.pdf'
luego pasa a xargs, que construye una línea de comando a chmod. Fíjate en las comillas alrededor del patrón '*.pdf'
, recuerda que la shell creará un globo si puede, pero quieres que el patrón pase a find
, así que necesitas citarlo.
Como los nombres de archivos pueden tener espacios en ellos, quieres usar un truco para hacer que el nombre de archivo con espacios sea seguro:
find . -type f -name '*.pdf' -print0 | xargs -0 chown someuser:somegroup
En el bash 3 e inferior, esta es la forma en que necesitas hacerlo. Un globbing más poderoso está disponible en el golpe 4 (con shopt -s globstar
) y otras conchas. Lo mismo en zsh, usando un globo recursivo **
:
chown -R someuser:somegroup ./**/*.pdf