Estoy tratando de aprender los comandos de UNIX y estoy jugando este juego para aprender y estoy realmente atrapado en este momento. Estoy en un servidor a través de ssh y el directorio está lleno de archivos y carpetas al azar y la contraseña para el siguiente nivel está dentro de uno de los archivos. Me han dicho que el archivo tiene los siguientes atributos:
- legible por humanos
- 1033 bytes
- no ejecutable
Supongo que debería usar el find
comando y lo intenté, find ! -executable
pero eso devolvió una carga de archivos. La única ayuda legible para humanos que puedo encontrar en el manual o en línea es imprimir los tamaños de los archivos en legibles para humanos. ¿Entonces estoy un poco perdido allí?
También lo intenté find ~ -size 1033b
pero eso no devolvió nada. Pero cuando lo intenté find ~ -size -1033b
, devolvió todos los archivos del directorio.
fuente
Respuestas:
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
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
file
comando para determinar el tipo de contenido del archivo. Pero no sería una buena idea correrfile
después de una tubería, porque complicaría la tarea de mostrar el nombre del archivo. Esto es lo que sugiero:Así es brevemente cómo
file
funciona la parte:-exec
predicado se ejecutash -c 'file -b $0 | grep -q text' FILENAME
para cada unoFILENAME
que satisfaga todas las condiciones anteriores (tipo, tamaño, no ejecutable).sh
) ejecuta este breve script :,file -b $0 | grep -q text
reemplazando$0
con el nombre del archivo.file
programa determina el tipo de contenido de cada archivo y genera esta información. La-b
opción impide imprimir el nombre de cada archivo probado.grep
filtra la salida proveniente delfile
programa, buscando líneas que contengan "texto" . (Vea usted mismo cómo sefile
ve una salida típica del comando).grep
no genera el texto filtrado, porque tiene la-q
opción (silenciosa) dada. Lo que hace es cambiar su estado de salida a0
(que representa "verdadero" - se encontró el texto filtrado) o 1 (que significa "error" - el texto "texto" no apareció en la salida defile
).grep
se pasa mássh
afind
ay actúa como el resultado final de la "-exec sh -c 'file $0 | grep -q text' {} \;
" prueba completa.-print
se ejecuta el comando (es decir, se imprime el nombre del archivo probado).fuente
find . -type f -size 1033c
también devolverá exactamente la misma respuesta.Tenga en cuenta que usé en
c
lugar deb
para el tamaño del archivo.b
es para bloques de 512 bytes.c
es para bytes reales.fuente
-readable
legible para humanos (es decir, no binario)find
afile
.todo lo que escribí fue:
y obtuve el archivo. Aparentemente, la parte legible para los humanos era desanimarte.
fuente
fuente
Creo que para el juego, sin embargo, la sintaxis correcta es:
Obtiene una declaración que enumera en qué consiste cada archivo. Funcionó muy bien para lo que intentas lograr en el juego Bandit. La bola curva real para esta tarea es que cada archivo comienza con - (guión).
fuente
file ./-*
este.Creo que esta es la mejor respuesta real que cubriría las 3 condiciones
Pero como mucha gente dijo, el ejecutable y el legible para humanos nos iban a dejar fuera, así que usando
es suficiente!
fuente