Wie kann ich für alle Dateien im aktuellen Verzeichnis einen Chown/Chmod-Befehl ausführen?

Wie kann ich für alle Dateien im aktuellen Verzeichnis einen Chown/Chmod-Befehl ausführen?

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( -rist veraltet):

chown -R username:groupname *

Antwort3

chownist großartig, wenn Sie ein Superuser sind. Ich hatte ein Problem, bei dem jemand anderes in meinem Verzeichnis lief makeund 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, .mkmeownerwenn 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 mkmeowneronein 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:groupnameEine 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 findwird mit einem regulären Ausdruck [a-zA-Z0-9]*in einer Subshell verwendet $(), die die Grundlage für komplexere Verwaltungsaufgaben bilden kann.

verwandte Informationen