chown
ist großartig, wenn Sie ein Superuser sind. Ich hatte ein Problem, bei dem jemand anderes make
in meinem Verzeichnis ausgeführt hatte und nun einige Dateien besaß, die ich nicht ändern konnte. Hier ist meine Umgehungslösung, die Dateien und Verzeichnisse behandelt, obwohl sie die Verzeichnisse mit der Endung .mkmeowner
herumliegen lässt, wenn sie sie nicht löschen kann.
- Das folgende Skript ändert den Eigentümer von Dateien und Verzeichnissen, die ihm übergeben wurden, so dass sie dem aktuellen Benutzer gehören, und versucht, Berechtigungsprobleme zu umgehen, indem es von jedem Verzeichnis oder jeder Datei, die nicht dem aktuellen Benutzer gehört, eine neue Kopie anfertigt, die Originaldatei löscht (oder versucht, zu löschen) und entsprechend umbenennt.
- Es soll eine Abkürzung für “make me owner” sein. Ich verwende keine Unterstriche, weil sie schwer zu tippen sind.
Beispiele:
% mkmeowner .
% mkmeowner dirpath1 dirpath2
- Das folgende Skript
mkmeownerone
muss sich 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