Tryb rekurencyjny działa tylko na katalogach, a nie na plikach. Używając glob '* .pdf', powłoka przekazuje listę plików do chown, która widzi, że są to pliki i zmienia uprawnienia do plików, które widzi, i to wszystko.
Pamiętaj, że w powłokach glob jest oceniany przez powłokę, a nie przez polecenie. Jeśli glob pasuje do plików, są one przekazywane do polecenia i polecenie nigdy nie wie, że glob istnieje. (Różni się to od tego, w jaki sposób wiersz poleceń systemu Windows służył do wykonywania różnych czynności). Jeśli masz katalog, z treścią coś takiego:
machine:$ ls -F
file1.pdf file2.pdf other.txt subdir/
I wpisałeś:
chown -R someuser:somegroup *.pdf
Najpierw powłoka utworzy listę: plik1.pdf plik2.pdf
a następnie uruchom polecenie:
chown -R someuser:somegroup file1.pdf file2.pdf
Widzisz, nie ma katalogu dla -R do działania. Robi to, o co go prosiłeś - zmienia prawa własności do dwóch plików w wierszu poleceń, ignorując tę dziwaczną flagę -R.
Aby zrobić, co chcesz, użyj „* .pdf” jako wzorca dla tego katalogu i podkatalogów, możesz użyć find
, który może znaleźć pliki, które pasują do wzorca nazwy pliku (lub wielu innych kryteriów) i przekazać do podkomendy
find . -type f -name '*.pdf' | xargs chown someuser:somegroup
To zaczyna się w aktualnym reż. aby wyszukać pliki (typ pliku f) wzorzec nazwy, '*.pdf'
a następnie przechodzi do xargs, który konstruuje linię poleceń do chmod. Zwróć uwagę na cytaty wokół wzorca '*.pdf'
, pamiętaj, że powłoka utworzy glob, jeśli to możliwe, ale chcesz przekazać wzór find
, więc musisz go zacytować.
Ponieważ w nazwach plików mogą znajdować się spacje, należy zastosować sztuczkę, aby zapewnić bezpieczeństwo nazw plików ze spacjami:
find . -type f -name '*.pdf' -print0 | xargs -0 chown someuser:somegroup
W bash 3 i niższych jest to sposób, w jaki musisz to zrobić. Bardziej zaawansowane globowanie jest dostępne w bash 4 (with shopt -s globstar
) i innych powłokach. To samo w przypadku Zsh przy użyciu rekurencyjnego globu **
:
chown -R someuser:somegroup ./**/*.pdf
shopt -s globstar
rekursywnym globowaniem.