La respuesta del usuario IporSricer find /home/cg/root -readable -executable
es el camino a seguir. Tenga en cuenta también que el comando find
tiene la ventaja adicional de poder personalizar el formato de su salida, incluidas las opciones para incluir muchos detalles posibles sobre cada archivo. Consulte la opción -printf
en la página man
. El objetivo principal de esta respuesta es tratar de proporcionar comentarios útiles sobre su pregunta para sus futuros guiones.
¡No use la salida de ls
para secuencias de comandos! Este es un error común de principiante. ref ¿Por qué *no *analiza `ls `?
En lugar de usar ls
, simplemente use el archivo nativo del shell , p. /home/cg/root/*
. Esa es (una de las razones )por las que existe la función.
Su secuencia de comandos no desciende a los directorios secundarios -, pero la respuesta del usuario IporSricer sí lo hace.
No usas -la función de expansión de subcadenas del shell, por lo que ninguna de tus pruebas funcionará. El segundo parámetro es una subcadena de longitud , no una posición final, por lo que ${perm:1:2}
devuelve una subcadena de dos -caracteres; desea ${perm:1:1}
para una subcadena de un solo carácter.
Una prueba más rápida sería definir variables separadas de la forma owner=${perm:1:2}
y luego probarlas contra "rx".
Me sorprende que parezca decir que &&
funciona dentro de un comando de prueba [
; Pensé que solo debería funcionar dentro de un [[
.
Dado que los tres if
, elif
, elif
están haciendo lo mismo, un echo
, puede combinarlos en un solo if
usando el ||
lógico 'o' operador (fuera de las pruebas [
).
Espero que sea útil.