Frage How to Chown ein Verzeichnis rekursiv einschließlich versteckter Dateien oder Verzeichnisse


Scheint so, als würde die rekursive Flagge nicht mit versteckten Verzeichnissen oder Dateien funktionieren. Gibt es dafür eine einfache Abhilfe?


31
2018-06-30 20:23


Ursprung




Antworten:


Ich bin mir ziemlich sicher, dass -R Flag funktioniert - es hat sowieso immer für mich. Was nicht funktionieren wird, und was mich schon früh in meiner Kommandozeilennutzung gestolpert hat, nutzt * in einem Verzeichnis mit versteckten Dateien / Verzeichnissen. So machen

$ chown -R /home/user/*

wird nicht die versteckten Dateien und Verzeichnisse tun. Allerdings, wenn Sie es mit folgen

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

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

$ chown -R /home/user

um alle versteckten Dateien und Verzeichnisse zu erhalten /home/user - Das ändert natürlich auch die Berechtigungen des Verzeichnisses selbst, die möglicherweise nicht Ihren Vorstellungen entsprechen.


50
2018-06-30 22:46



Machen a chown Auf dem Verzeichnis hat die Nebenwirkung, dass Sie die Berechtigungen für das Verzeichnis selbst sowie alle seine Inhalte ändern, die möglicherweise nicht das was Sie wollen. - wfaulk
A + wirkte wie ein Zauber für mich. - SuperFamousGuy
Ich habe es versucht chown nginx:nginx -R /path/to/.[^.]* und es änderte nur den Besitz von versteckten Dateien .dot. nicht alle. - Pathros


Ich glaube, der folgende Befehl sollte dafür funktionieren

chown -hR userid:usergroup /nameofdirectory/nameofsubdir/

8
2018-06-30 22:51



-h beeinflusst symbolische Links anstelle von referenzierten Dateien (nützlich nur auf Systemen, die den Besitz eines Symlinks ändern können) - R. van Twisk


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

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

7
2018-06-30 20:34



Beachten Sie, dass mit GNU finden, verwenden + anstatt ; als der Terminator für die -exec wird effizienter sein, da es die minimal benötigte Anzahl von Gabeln zu Chown anstelle von einer Verzweigung pro Datei / Verzeichnis verwenden wird - stew


Sie können das ändern dotglob Attribut vorübergehend zu erweitern. Dateien und dann wieder zurück.

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

Mehr dazu dotglob kann gefunden werden Hier


2
2017-08-17 06:44





Außerdem, wenn Sie wie ich sind, werden Sie wahrscheinlich Chown meist aus dem aktuellen Verzeichnis laufen. Ich war es gewohnt, es so zu führen: chown rails.rails -R * . Ändern Sie einfach den Stern wie folgt in einen Punkt (kurz für das aktuelle Verzeichnis): chown rails.rails -R . bringt alle versteckten Verzeichnisse ein.


1
2018-05-10 21:49



Mit dem Nebeneffekt, dass Sie die Berechtigungen für das aktuelle Verzeichnis sowie alle seine Inhalte ändern, die möglicherweise nicht das was Sie wollen. - wfaulk


For-Schleife mit verwenden ls -A Option, Wir können alle versteckten Dateien finden und Verzeichnis ausschließen . und .. und ändern Sie dann den Besitz für alle versteckten Dateien und Verzeichnisse.

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

Benutzen xargs Option mit ls -A 

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

Für mehr Details Klicken Sie hier und besuchen Sie meine Website


1
2017-07-08 12:48





Du könntest etwas wie

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

Das -A (Hauptstadt A) ist wichtig, da "." und '..'


-2
2018-06-30 20:33



Dadurch werden nur Dateien und Unterverzeichnisse im aktuellen Verzeichnis geändert, keine niedrigeren Ebenen. (Was das OP vielleicht will.) Es wird auch auf Dateinamen und Verzeichnisnamen mit Leerzeichen (oder Tabs) in ihnen brechen. - wfaulk