Wie kann ich alle Dateien im aktuellen Verzeichnis chown / chmod?

56

Ich versuche, den Besitz und die Berechtigungen einiger Dateien (und Verzeichnisse) im aktuellen Verzeichnis zu ändern. Ich habe es versucht:

chown username:groupname .

... in der Erwartung, dass es sich auf alle Dateien im aktuellen Verzeichnis auswirken würde, sondern nur auf das Verzeichnis, in dem ich mich befinde (was das Gegenteil von dem ist, was ich tun möchte). Ich möchte es für alle Dateien ändern, ohne das aktuelle Verzeichnis zu beeinflussen, in dem ich mich befinde.

Wie kann ich alle Dateien im aktuellen Verzeichnis anzeigen und ändern?

Andrew
quelle
man chownund man chmodbeantworten Sie einfach Ihre Frage.
Shi
2
@Shi Ich denke, es ist eine faire Frage. Das Lesen dieser Manpage würde nicht helfen. Globbing gehört nicht dazu chmod. Es ist in die Schale eingebaut. Auch die Lektüre der Dokumentation über das Globbing entzieht Ihnen das Leben (ich habe viel zu viel Zeit damit verbracht, alle Funktionen des zsh herauszufinden).
DJF
1
@ djf:chown -R user:group .
Shi

Antworten:

96

Sie möchten verwenden chown username:groupname *, und lassen Sie die Shell *auf den Inhalt des aktuellen Verzeichnisses erweitern. Dadurch werden die Berechtigungen für alle Dateien / Ordner im aktuellen Verzeichnis geändert, nicht jedoch für den Inhalt der Ordner.

Sie könnten auch chown -R username:groupname .Folgendes tun , um die Berechtigungen für das aktuelle Verzeichnis zu ändern und dann die darin enthaltenen und alle Unterordner erneut zu durchsuchen, um die Berechtigungen zu ändern.

chown -R username:groupname *ändert die Berechtigungen für alle Dateien und Ordner rekursiv, wobei das aktuelle Verzeichnis selbst in Ruhe gelassen wird. Diesen und den ersten Stil verwende ich am häufigsten.

Darth Android
quelle
2
@Andrew Sei aber auf der Hut, er kann sowohl Freund als auch Feind der Müden oder Unvorbereiteten sein.
Darth Android
5
Achten Sie auch auf die Gefahren der Zeit. Da steht es direkt neben dem "/" auf der Tastatur. Ein einfacher Tippfehler kann leicht chown -R username:groupname .werden chown -R username:groupname /. Aus einer 2-Sekunden-Aufgabe einen 2-Tage-Albtraum machen.
Teynon
@Tom Deshalb sollte ich wahrscheinlich anfangen, -valle meine rekursiven Befehle zu verwenden, aber zu faul
Kolob Canyon
Nur als die beste und prägnanteste Antwort gewertet, obwohl ich spezifisch sein und das Verzeichnis benennen würde, nur um ein Ausrutschen der Tastatur zu vermeiden:chown -R username:groupname directoryname
Dave Everitt
9

Ich denke du willst das:

chown username:groupname *

Wenn Sie auch Unterverzeichnisse rekursiv ändern möchten, benötigen Sie den Schalter -R(nicht mehr -rempfohlen):

chown -R username:groupname *

djf
quelle
0

chownist großartig, wenn Sie ein Superuser sind. Ich hatte ein Problem, bei dem jemand anderes makein meinem Verzeichnis ausgeführt wurde, und besaß nun einige Dateien, die ich nicht ändern konnte. Hier ist meine Problemumgehung, die Dateien und Verzeichnisse behandelt, obwohl die Verzeichnisse mit einem Suffix versehen bleiben, .mkmeownerwenn sie nicht gelöscht werden können.

  • Das folgende Skript ändert den Besitz von Dateien und Verzeichnissen, die an den aktuellen Benutzer übergeben wurden, und versucht, Berechtigungsprobleme zu umgehen, indem eine neue Kopie aller Verzeichnisse oder Dateien erstellt wird, die nicht dem aktuellen Benutzer gehören. Löschen (oder Löschen) die ursprüngliche Datei, und entsprechend umbenennen.
  • Es soll eine Abkürzung für "make me owner" sein. Ich benutze keine Unterstriche, weil das Tippen sehr schwierig ist.

Beispiele:

% mkmeowner .

% mkmeowner dirpath1 dirpath2
  • Das folgende Skript muss mkmeowneronesich in Ihrem Pfad befinden.

mkmeowner:

#!/bin/bash
[ "x$1" == "x-h" ] || [ "x$1" == "x--help" ] && cat << END && exit 0
Usage: $0 dirorfile [direorfile2 ...]:
    change ownership of directories or files to current user.
    Current user must have permissions to read those and write to owner directory.
END
mkmeownerone=`which mkmeownerone`
for d in $*; do
    find "$d" -not -user `whoami` -exec $mkmeownerone {} \;
done

mkmeownerone:

#!/bin/bash
# change ownership of one file or directory
f="$1"
expr match "${f}" '.*\.mkmeowner$' > /dev/null && exit 1 # already tried to do this one
if mv -f "$f" "${f}.mkmeowner"; then
    cp -pr "${f}.mkmeowner" "$f" && rm -rf "${f}.mkmeowner"
    exit 0
fi
exit 1
sbcondor
quelle
1
(1) Wir bevorzugen Antworten mit Erläuterungen. Ich war überrascht, als ich Ihre Skripte las und sah, was sie taten, weil Ihr einleitender Absatz mir keinen Hinweis gab. (2) Sie haben vergessen zu erwähnen, dass der Benutzer mkmeowneroneden Suchpfad eingeben muss.  mkmeownerwird explodieren, wenn das nicht getan wird. (3) Erfahren Sie, wie (dh wann und wo) Anführungszeichen in Shell-Befehlen und Skripten verwendet werden. Sagen ${f}ist keine sinnvolle Alternative; sieh das . … (Fortsetzung)
Scott
(Fortsetzung)… (4) Wenn Sie Ihr Skript in einem Verzeichnis ausführen, wird möglicherweise jede Datei in diesem Verzeichnis zweimal kopiert. (5)  exprist veraltet. Es ist effizienter, einen einfachen String-Abgleich in der Shell durchzuführen. Bash unterstützt auch die Suche nach regulären Ausdrücken. In diesem Fall können Sie den Dateinamentest in find. (6) ausführen. Ihr expr matchBefehl testet, ob er mit ${f}endet mkmeownerund nicht, ob er mit endet .mkmeowner. Daher wird das Skript nicht an sich selbst arbeiten. … (Fortsetzung)
Scott
(Fortsetzung)… Nun, das ist wohl eine gute Sache - Sie möchten ein Skript nicht verschieben und möglicherweise löschen, während es ausgeführt wird. (Es wird nicht unbedingt ein Problem verursachen, aber es kann chaotisch sein.) Aber Sie sollten solche Sonderfälle verstehen (und dokumentieren). (7) Möglicherweise möchten Sie Unterstriche in Zeichenfolgen mit mehreren Wörtern verwenden.  dirorfileist schwer zu lesen und zu verstehen (vergleiche mit dir_or_file), und als ich es sah mkmeowner, dachte ich zuerst an eine Katze ( mk +  meow +  ner).
Scott
Danke für die Notizen, Scott. 1. Ich dachte, ich hätte eine Erklärung, aber lassen Sie mich genauer sein. 2. guter Punkt. Ich hatte das in meinem ursprünglichen Drehbuch festgehalten, aber die Referenz herausgenommen. 3. Ich habe 30 Jahre lang Shell-Skripte geschrieben, aber ich werde versuchen, mehr zu lernen. 4. Ja, das tut es. Absichtlich, weil ich das Verzeichnis nicht löschen kann, wenn ich es nicht besitze. Das kann ich erwähnen. 5. Yah, ich bin altmodisch, aber expr funktioniert immer noch ziemlich gut. 6. ha guter Punkt. 7. Ich glaube, ich bekomme eine künstlerische Lizenz, da Unterstriche keine Regel sind. Ich brauche ein Skript, das Miauen macht!
sbcondor
Ich glaube nicht, dass mit $ {f} etwas nicht stimmt, oder? Es ist nur ein bisschen länger als nötig. Es ist ein Format, das ich oft benutze, weil ich eine Variable verwenden möchte, um einen längeren String wie $ {f} .mkmeowner zu erstellen, und ich muss mich nicht erinnern, ob $ f.heck $ {f} + heck oder $ {bedeutet. f.heck}
sbcondor