So wird ein Verzeichnis rekursiv angezeigt, einschließlich versteckter Dateien oder Verzeichnisse


37

Scheint, als würde das rekursive Flag nicht für versteckte Verzeichnisse oder Dateien verwendet. Gibt es eine einfache Lösung dafür?

Antworten:


56

Ich bin mir ziemlich sicher, dass die -RFlagge funktioniert - sie hat es sowieso immer für mich. Was nicht funktioniert und mich zu Beginn meiner Kommandozeilenverwendung gestört hat, ist die Verwendung *in einem Verzeichnis mit versteckten Dateien / Verzeichnissen. Also mache ich

$ chown -R /home/user/*

wird nicht die versteckten Dateien und Verzeichnisse tun. Wenn Sie es jedoch mit folgen

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

dann machst du alle versteckten dateien (aber nicht .oder ..wie immer /home/user/.*). Nachdem ich das alles gesagt habe, würde ich erwarten

$ chown -R /home/user

um alle versteckten Dateien und Verzeichnisse zu erhalten /home/user- obwohl dies natürlich auch die Berechtigungen des Verzeichnisses selbst ändert, was möglicherweise nicht das ist, was Sie beabsichtigt haben.


3
Wenn Sie chowndas Verzeichnis bearbeiten, ändern Sie nebenbei die Berechtigungen für das Verzeichnis selbst sowie den gesamten Inhalt des Verzeichnisses.
wfaulk

A + hat für mich wie ein Zauber gewirkt.
SuperFamousGuy

Ich habe es versucht chown nginx:nginx -R /path/to/.[^.]*und es hat nur den Besitzer in .dot versteckte Dateien geändert. nicht alle.
Pathros

@wfaulk Wie von @Hamish Downer erwähnt, müssen Sie beides tun *und ihm folgen .[.^]*, um alle Dateien zu erhalten.
god_is_love

9

Ich glaube, der folgende Befehl sollte dafür funktionieren

chown -hR userid:usergroup /nameofdirectory/nameofsubdir/

1
-h Auswirkungen auf symbolische Links anstelle von Dateien, auf die verwiesen wird (nützlich nur auf Systemen, die den Besitz eines
Symlinks

8

"chown -R" funktioniert, aber eine Alternative wäre find.

 find /path/to/dir -exec chown USER {} \;

5
Beachten Sie, dass es mit GNU find effizienter ist, +anstelle von ;als Abschlusszeichen -exec zu verwenden, da die minimale Anzahl von zu chownenden Gabeln anstelle von einer Gabel pro Datei / Verzeichnis verwendet wird
Eintopf

3

Sie können das dotglobAttribut vorübergehend ändern , um es zu erweitern. Dateien und stellen Sie es dann wieder her.

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

Mehr dotglobdazu finden Sie hier


2

Mit for-Schleife mit ls -AOption, können wir alle versteckten Dateien finden und Verzeichnis ausschließen .und ..dann für alle versteckten Dateien und Verzeichnisse , die den Besitzer wechseln.

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

Verwenden Sie xargsOption mitls -A

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

Für weitere Informationen klicken Sie hier und besuchen Sie meine Website


1

Auch, wenn Sie wie ich sind, werden Sie wahrscheinlich meistens aus dem aktuellen Verzeichnis heraus ausgeführt. Ich war es gewohnt , es so zu laufen: chown rails.rails -R *. Ändern Sie einfach den Stern in einen Punkt (kurz für das aktuelle Verzeichnis), um chown rails.rails -R .alle versteckten Verzeichnisse einzublenden.


2
Mit dem Nebeneffekt, dass Sie die Berechtigungen für das aktuelle Verzeichnis sowie den gesamten Inhalt ändern, der möglicherweise nicht Ihren Wünschen entspricht.
wfaulk

1

chownfunktioniert mit versteckten Dateien und Verzeichnissen. Im folgenden Beispiel ändern wir den Benutzer- und Gruppenbesitz für alle Dateien in ~/some/folder. Alle Dateien sind alle versteckten Dateien (zB .bashrc, .profileetc.) und Ordner auf der ~/some/folderEbene und unten. Beachten Sie insbesondere, dass wir den Eigentümer von nicht ändern möchten ~/someund daher die Datei ~/some/..von den Eigentumsänderungen ausschließen.

$ cd ~/some/folder 
$ sudo chown -R usrname:grpname . 
$ 

Das hat bei mir
geklappt

0

So zeigen Sie ALLE Dateien im aktuellen Verzeichnis und in den Unterverzeichnissen des aktuellen Benutzers an:

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

oder wenn der Benutzer einige Dateien aufgrund eingeschränkter Berechtigungen nicht anzeigen kann;

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

-2

Sie könnten so etwas tun

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

Das -A( Kapital A) ist wichtig, da es '.' Ausschließt. und '..'


Dadurch werden nur Dateien und Unterverzeichnisse im aktuellen Verzeichnis geändert, keine niedrigeren Ebenen. (Das kann sein, was das OP will.) Es bricht auch bei Dateinamen und Verzeichnisnamen mit Leerzeichen (oder Tabulatoren) ab.
wfaulk
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.