Wie Unterverzeichnisse eines vorgesehenen Weg chmod (BASH)
-
21-09-2019 - |
Frage
Ich brauche ein Skript, das eine einzige Befehlszeile Argument, dass ein Verzeichnispfad ist. Das Skript sollte das Argument überprüfen, um zu bestimmen, ob es in der Tat ist ein Verzeichnis. Wenn es ein Verzeichnis ist, dann sollte das Skript den Schutz ändern Modus irgendwelcher darin auf 600 befindet Unterverzeichnisse Wenn das Argument kein Verzeichnis ist, dann wird eine entsprechende Meldung ausgedruckt werden soll.
Ich habe
if [-d $ 1]; dann
sonst
echo "Dies ist kein Verzeichnis"
fi
Im Grunde weiß ich nicht, was auf der Leerzeile zu setzen. Ich war Herumalbern mit chmod aber meine Linie schien zu wollen, den eingegebenen Pfad zu ändern und nicht nur die Unterverzeichnisse.
Lösung
if test -d "$1"; then find "$1" -type d -exec chmod 600 '{}' \; else echo "Not a directory: $1" >&2 exit 1 fi
Verschiedene Varianten schneller sein können, aber hängen von Funktionen, die nicht in der alten find
oder xargs
.
find "$1" -type d -exec chmod 600 '{}' +
find "$1" -type d -print0 | xargs -0r chmod 600
Andere Tipps
([ -d "$1" ] && find $1 -type d -mindepth 1 | xargs chmod 600 | true) || echo 'Not a directory'