Jak rekurencyjnie przeglądać katalog zawierający ukryte pliki lub katalogi

37

Wygląda na to, że chown z flagą rekurencyjną nie działa na ukrytych katalogach lub plikach. Czy jest na to jakieś proste obejście?

Toby
źródło

Odpowiedzi:

56

Jestem pewien, że -Rflaga działa - i tak zawsze dla mnie działa. Co nie zadziała i co mnie potknęło na początku korzystania z wiersza poleceń, to używanie *w katalogu z ukrytymi plikami / katalogami. Tak robię

$ chown -R /home/user/*

nie zrobi ukrytych plików i katalogów. Jeśli jednak zastosujesz się do niego

$ chown -R /home/user/.[^.]*

wtedy zrobisz wszystkie ukryte pliki (ale nie .lub ..tak /home/user/.*, jak by to zrobiło). Powiedziawszy to wszystko, oczekiwałbym

$ chown -R /home/user

aby umieścić wszystkie ukryte pliki i katalogi w środku /home/user- choć to oczywiście zmieni również uprawnienia do samego katalogu, co może nie być tym, czego zamierzałeś.

Hamish Downer
źródło
3
Wykonanie polecenia chownw katalogu powoduje efekt uboczny polegający na zmianie uprawnień do samego katalogu, a także całej jego zawartości, co może być lub nie być tym, czego chcesz.
wfaulk
A + działało dla mnie jak urok.
SuperFamousGuy
Próbowałem chown nginx:nginx -R /path/to/.[^.]*i zmieniłem tylko własność na ukryte pliki .dot. nie wszystko.
Pathros,
@wfaulk Jak wspomniano przez @Hamish Downer, musisz wykonać obie czynności *i postępować zgodnie z nimi, .[.^]*aby uzyskać wszystkie pliki.
god_is_love
9

uważam, że następujące polecenie powinno działać w tym celu

chown -hR userid:usergroup /nameofdirectory/nameofsubdir/
MattrixHax
źródło
1
-h wpływa na dowiązania symboliczne zamiast jakiegokolwiek pliku, do którego istnieje odwołanie (przydatne tylko w systemach, które mogą zmienić własność dowiązania symbolicznego)
R. van Twisk
8

„chown -R” działa, ale alternatywą byłoby użycie find.

 find /path/to/dir -exec chown USER {} \;
Hayalci
źródło
5
zauważ, że w przypadku GNU find użycie +zamiast ;jako terminatora -exec będzie bardziej wydajne, ponieważ użyje minimalnej potrzebnej liczby widelców do wyświetlenia zamiast jednego rozwidlenia na plik / katalog
gulasz
3

Możesz dotglobtymczasowo zmienić atrybut, aby rozwinąć. pliki, a następnie przywróć go.

shopt -s dotglob; chown -R user:group FOLDER; shopt -u dotglob

Więcej informacji dotglobmożna znaleźć tutaj

stdcall
źródło
2

Używając pętli for z ls -Aopcji, możemy znaleźć wszystkie ukryte pliki i katalog wykluczyć .a .., a następnie zmienić właściciela wszystkich ukrytych plików i katalogu.

for i in `ls -A | grep "^\."`;do chown -R user:group $i;done

Użyj xargsopcji zls -A

ls -A | grep "^\." | xargs chown user:group

Aby uzyskać więcej informacji, kliknij tutaj i odwiedź moją stronę

Ranjeet_Automation_Tester
źródło
1

Ponadto, jeśli jesteś podobny do mnie, prawdopodobnie uruchomisz chown głównie z bieżącego katalogu. Byłem przyzwyczajony do działa to tak: chown rails.rails -R *. Wystarczy zmienić gwiazdkę na kropkę (skrót od bieżącego katalogu) w ten sposób: chown rails.rails -R .wyświetla wszystkie ukryte katalogi.

Craig
źródło
2
Z efektem ubocznym, że zmieniasz uprawnienia do bieżącego katalogu, a także całej jego zawartości, co może być lub nie być tym, czego chcesz.
wfaulk
1

chownbędzie działać z ukrytymi plikami i katalogami. W poniższym przykładzie zmienimy własność użytkownika i grupy dla wszystkich plików w ~/some/folder. Wszystkie pliki obejmuje wszystkie ukryte pliki (np .bashrc, .profileetc.) i foldery na tym ~/some/folderpoziomie i poniżej. Zwróć uwagę w szczególności, że nie chcemy zmieniać prawa własności ~/somei dlatego wykluczymy plik ~/some/..ze zmian własności.

$ cd ~/some/folder 
$ sudo chown -R usrname:grpname . 
$ 
Seamus
źródło
To zadziałało dla mnie
klor
0

Aby wyświetlić WSZYSTKIE pliki w bieżącym katalogu i podkatalogach dla bieżącego użytkownika;

find . -exec chown $(whoami) {} \;

lub jeśli użytkownik nie może zmienić niektórych plików z powodu ograniczonych uprawnień;

sudo find . -exec chown $(logname) {} \;
5p0ng3b0b
źródło
-2

Możesz zrobić coś takiego

for i in `ls -A`;do chown -R user:group $i;done

-A( Kapitał A) jest ważna, ponieważ wyklucza „” i '..'

Zypher
źródło
Spowoduje to zmianę tylko plików i podkatalogów w bieżącym katalogu, a nie niższych poziomów. (Które może być tym, czego chce OP). Będzie także łamać nazwy plików i katalogów ze spacjami (lub tabulatorami).
wfaulk