4 votos

Lista de archivos de sólo lectura

Necesito listar o mostrar o consultar los archivos en una carpeta (bueno, técnicamente, en una unidad USB, pero puedo navegar hasta ella en Finder/Terminal) que están marcados como de sólo lectura.

Todo el Google-fu en el mundo sólo revela soluciones para cambiar los permisos, pero no necesito hacer eso.

Mi Dashcam marca los vídeos/imágenes como de sólo lectura para guardarlos cuando pulso el botón en ella, pero siguen estando en una carpeta con unos cientos de archivos MOV, y necesito una forma sencilla de filtrar hasta los que busco.

2voto

Yoric Puntos 268

Una forma de hacerlo es utilizar el -w en bash para comprobar si el archivo es escribible o no.

Entra en el directorio en el que quieres comprobar tus archivos, y luego entra:

for RO in $(find . -type f);do [ -r "$RO" ] && [ ! -w "$RO" ] && echo $RO;done

(crédito a www.unix.com )

[EDITAR]

Para tratar los espacios en los nombres de los archivos, es mejor utilizar la función find -exec en lugar de hacer un bucle en el find :

find . -type f -exec [ -r {} ] \; -exec [ ! -w {} ] \; -exec echo {} \;

o

find . -type f -exec [ -r {} ] \; -exec [ ! -w {} ] \; -print

0 votos

Analizar textualmente la salida de find suele interrumpir los nombres de archivo que contienen caracteres de espacio y similares. Puede no ser un problema en el contexto que tiene el OP, pero podría afectarle en otras circunstancias.

0 votos

@nohillside Gracias por el aviso, he arreglado el caso sustituyendo el bucle for por el uso de find -exec

0 votos

Mi (espero) último comentario al respecto: find . -type f -exec [ -r {} -a \! -w {} ] \; -print mucho más fácil de leer que el find ... | xargs ... sh -c monstruosidad en mi propia respuesta :-)

1voto

find . -type f -perm +444 \! -perm +222

busca todos los archivos ( -type f ) que son legibles ( -perm +444 ) pero no se puede escribir ( ! +perm +222 ).

Si su mente se tambalea después de leer sobre -perm en man find también puede utilizar la opción (significativamente más lenta, especialmente en dispositivos lentos) de procesar la salida de find a ti mismo:

find . -type f -print0 |
    xargs -0 -n 1 sh -c '[ -r "$1" -a ! -w "$1" ] && echo "$1"' sh

Esto básicamente toma cada archivo find encuentra, y lo ejecuta a través de un pequeño shells script para comprobar los permisos.

PD: Oye, no he dicho que la segunda forma sea menos alucinante :-)

1 votos

Aunque el segundo método es más lento, puede ser más preciso en ciertas situaciones si no me equivoco con esta prueba de ejemplo: touch test_file; sudo chown root:staff test_file; (el primer método no consigue listar el archivo, aunque es un archivo de sólo lectura para el usuario)

1 votos

@Yoric No hay una solución general para esto usando find solo, ver unix.stackexchange.com/questions/22421/ y la pregunta original enlazada desde allí. En el caso de la OP probablemente no es un problema.

1 votos

Gracias, la cabeza me da vueltas ahora mismo, hay mucho que aprender indagando en "simples preguntas" :)

-1voto

Glenn Quinn Puntos 1

Enumerar los archivos y grep para el patrón de sólo lectura:

ls -l | grep '^-r--'

^ indica el inicio de la línea.

Aquí sólo filtramos los archivos mencionando ^- Después de esto, se busca sólo los archivos con permiso de lectura especificando r-- . Si desea filtrar los archivos de permiso de lectura y ejecución, puede utilizar r-x .

Si sólo desea el nombre del archivo, puede utilizar el siguiente comando

ls -l | grep '^-r--' | awk 'NF>1{print $NF}'

La impresión del nombre del archivo utilizando el comando anterior funciona, sólo si no tiene espacios en el nombre del archivo.

2 votos

Engrasando el ls -l es una forma inteligente de hacerlo, pero ten en cuenta que tus archivos pueden comenzar con -rw-r--r-- con root como propietario, y dichos archivos no aparecerán en la lista, aunque el usuario no pueda escribir en ellos.

1 votos

grep ... | awk no suele ser necesario, el segundo comando puede reescribirse como ls -l | awk '/^-r--/ {print $NF}'

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X