
Ich versuche, den Besitz und die Berechtigungen einiger Dateien (und Verzeichnisse) im aktuellen Verzeichnis zu ändern. Ich habe Folgendes versucht:
chown username:groupname .
...erwartet, dass es alle Dateien im aktuellen Verzeichnis betrifft, aber stattdessen betrifft es nur 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 für alle Dateien im aktuellen Verzeichnis chownen und chmodden?
Antwort1
Sie möchten verwenden chown username:groupname *
und die Shell *
den Inhalt des aktuellen Verzeichnisses erweitern lassen. Dadurch werden die Berechtigungen für alle Dateien/Ordner im aktuellen Verzeichnis geändert, jedoch nicht für den Inhalt der Ordner.
Sie können auch Folgendes tun chown -R username:groupname .
: Dadurch werden die Berechtigungen für das aktuelle Verzeichnis geändert. Anschließend können Sie rekursiv innerhalb des Verzeichnisses und aller Unterordner die Berechtigungen ändern.
chown -R username:groupname *
ändert die Berechtigungen für alle Dateien und Ordner rekursiv, während das aktuelle Verzeichnis selbst unverändert bleibt. Diesen und den ersten Stil verwende ich am häufigsten.
Antwort2
Ich glaube, Sie möchten dies:
chown username:groupname *
Wenn Sie auch Unterverzeichnisse rekursiv ändern möchten, benötigen Sie den Schalter -R
( -r
ist veraltet):
chown -R username:groupname *
Antwort3
chown
ist großartig, wenn Sie ein Superuser sind. Ich hatte ein Problem, bei dem jemand anderes in meinem Verzeichnis lief make
und nun einige Dateien besaß, die ich nicht ändern konnte. Hier ist mein Workaround, der Dateien und Verzeichnisse verarbeitet, obwohl er die Verzeichnisse mit Suffix herumliegen lässt, .mkmeowner
wenn er sie nicht löschen kann.
- Das folgende Skript ändert den Besitz der ihm übergebenen Dateien und Verzeichnisse so, dass sie dem aktuellen Benutzer gehören. Dabei wird versucht, Berechtigungsprobleme zu umgehen, indem von jedem Verzeichnis oder jeder Datei, die nicht dem aktuellen Benutzer gehört, eine neue Kopie erstellt wird, die Originaldatei gelöscht (oder zu löschen versucht) und die Datei anschließend entsprechend umbenannt wird.
- Es soll eine Abkürzung für „mach mich zum Eigentümer“ sein. Ich verwende keine Unterstriche, weil sie schwer zu tippen sind.
Beispiele:
% mkmeowner .
% mkmeowner dirpath1 dirpath2
- Dazu muss sich das folgende Skript
mkmeownerone
in Ihrem Pfad befinden.
mkmebesitzer:
#!/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
Antwort4
username:groupname
Eine andere Möglichkeit , alle Dateien im aktuellen Verzeichnis zu ändern, besteht darin, mit einer Subshell zu arbeiten:
chown username:groupname $(find . -name "[a-zA-Z0-9]*")
Der in Bash integrierte Befehl find
wird mit einem regulären Ausdruck [a-zA-Z0-9]*
in einer Subshell verwendet $()
, die die Grundlage für komplexere Verwaltungsaufgaben bilden kann.