Para filtrar los nombres de archivo legibles por humanos, puede hacer uso del nombre de la clase de caracteres[:print:] ( imprimible ) . Encontrará más información sobre tales clases en el manual de .grep
find . -type f -size 1033c -name "[[:print:]]*" ! -executable
Pensándolo bien, el requisito de "lectura humana" podría referirse al contenido del archivo, en lugar de su nombre. En otras palabras, estaría buscando archivos de texto . Eso es un poco más complicado. Como @D_Bye sugirió en un comentario, debe usar el filecomando para determinar el tipo de contenido del archivo. Pero no sería una buena idea correr filedespués de una tubería, porque complicaría la tarea de mostrar el nombre del archivo. Esto es lo que sugiero:
find . -type f -size 1033c ! -executable -exec sh -c 'file -b $0 | grep -q text' {} \; -print
Así es brevemente cómo filefunciona la parte:
- El
-execpredicado se ejecuta sh -c 'file -b $0 | grep -q text' FILENAMEpara cada uno FILENAMEque satisfaga todas las condiciones anteriores (tipo, tamaño, no ejecutable).
- Para cada uno de esos archivos, un shell (
sh) ejecuta este breve script :, file -b $0 | grep -q textreemplazando $0con el nombre del archivo.
- El
fileprograma determina el tipo de contenido de cada archivo y genera esta información. La -bopción impide imprimir el nombre de cada archivo probado.
grepfiltra la salida proveniente del fileprograma, buscando líneas que contengan "texto" . (Vea usted mismo cómo se fileve una salida típica del comando).
- Pero
grepno genera el texto filtrado, porque tiene la -qopción (silenciosa) dada. Lo que hace es cambiar su estado de salida a 0(que representa "verdadero" - se encontró el texto filtrado) o 1 (que significa "error" - el texto "texto" no apareció en la salida de file).
- El estado de salida verdadero / falso proveniente de
grepse pasa más sha finday actúa como el resultado final de la " -exec sh -c 'file $0 | grep -q text' {} \;" prueba completa.
- En caso de que la prueba anterior sea verdadera ,
-printse ejecuta el comando (es decir, se imprime el nombre del archivo probado).