¿Cómo uso el comando de búsqueda para enumerar archivos grabables en todo el mundo en un directorio sin tener que atravesar ningún subdirectorio?

¿Cómo uso el comando de búsqueda para enumerar archivos grabables en todo el mundo en un directorio sin tener que atravesar ningún subdirectorio?

La solución a este problema se me ha estado evadiendo durante semanas. Estoy intentando escribir un comando para encontrar solo archivos grabables en todo el mundo en un conjunto específico de directorios sin atravesar ningún subdirectorio usando -prune.

He intentado una multitud de opciones diferentes sólo para quedarme con

find / -type f -perm -2

Sin embargo, esto todavía atraviesa los subdirectorios. Usando el comando

find / -prune -type f -perm -2

tampoco arroja resultados. ¿En qué me equivoco con esto?

Respuesta1

Intente usar maxdepth Nen su lugar:

-niveles de profundidad máxima
Descienda en la mayoría de los niveles (un número entero no negativo) de directorios por debajo de los puntos de partida. -max Depth 0 significa aplicar solo las pruebas y acciones a los propios puntos de partida.

find $FOLDER -maxdepth 1 -perm -2

Respuesta2

find / -type f -perm -2

Esto es recursivo. Eso es lo que findhace.

find / -prune -type f -perm -2

Aquí, le indica findque aplique -prunea todo lo que encuentre. Las condiciones y acciones se procesan de izquierda a derecha; Como no hay ninguna condición antes -prune, se aplica incondicionalmente. Entonces, lo primero que findencuentra, que es el argumento de la línea de comando /, se -prunele ha aplicado y, por lo tanto, findno atraviesa el contenido del directorio. Como /no cumple con las siguientes condiciones, no se imprime.

Para procesar solo las entradas del directorio de nivel superior, debe aplicar -prunea los directoriosexcepto los argumentos de la línea de comando. La forma portátil de hacer esto es usarlo /.al final de la ruta pasada en la línea de comando. Esto hace findque se trate su nombre como ., por lo que puedes usarlo -name .para hacer coincidirlos. En un recorrido recursivo, nunca se llama a ningún archivo .ya que este nombre está reservado. Ahora hay tres casos diferentes:

  • Directorio de nivel superior: recursivo.
  • Otro directorio: no recurra.
  • Archivo normal en el que se puede escribir en todo el mundo: imprimir.

Para especificar varios comportamientos diferentes, utilice el -ooperador (“o”). Se aplica el primero para el que coinciden todas las condiciones.

find /. -name . -o -type d -prune -o -type f -perm -2 -print

Algunas versiones de findpermiten escribir find / -name / -o -type d -prune -o …pero otras no (por ejemplo, BusyBox).

Algunas versiones findadmiten opciones -mindepthy -maxdepthlimitan el recorrido recursivo. Si su búsqueda lo admite, puede usar esto en lugar de -prune.

find / -mindepth 1 -maxdepth 1 -type f -perm -2

( -mindepthy -maxdepthson opciones globales, la parte de condiciones y acciones tiene -type f -perm -2el final implícito -print).

información relacionada