Cómo chmod de subdirectorios de una ruta proporcionada (BASH)
-
21-09-2019 - |
Pregunta
Necesito un script que toma un solo argumento de línea de comandos que es una ruta de directorio. El script debe comprobar el argumento para determinar si en realidad es un directorio. Si se trata de un directorio, entonces el script debe cambiar el modo de protección de los subdirectorios ubicados en ella a 600. Si el argumento no es un directorio, a continuación, un mensaje apropiado debe ser impreso.
Tengo
if [-d $ 1]; entonces
else
echo "Este no es un directorio"
fi
Básicamente no sé qué poner en la línea en blanco. Yo estaba jugando con chmod, pero mi línea parecía querer cambiar la ruta de entrada y la no sólo los subdirectorios.
Solución
if test -d "$1"; then find "$1" -type d -exec chmod 600 '{}' \; else echo "Not a directory: $1" >&2 exit 1 fi
Varias variantes pueden ser más rápido, sino que dependen de características no en find
antigua o xargs
.
find "$1" -type d -exec chmod 600 '{}' +
find "$1" -type d -print0 | xargs -0r chmod 600
Otros consejos
([ -d "$1" ] && find $1 -type d -mindepth 1 | xargs chmod 600 | true) || echo 'Not a directory'