Solución con awk
al final.
Uso de GNUsed
(que admite salir del script sed
con un estado de salida explícito):
find. -type f -size +0c -exec sed -n '1{/^[^[:blank:]]/q 1};q' {} ';' -print
El -size +0c
garantiza que los archivos que están completamente vacíos no se informen.
Si el directorio actual contiene los dos archivos de la pregunta y un archivo adicional c.txt
con una primera línea vacía, esto genera
./b.txt
./c.txt
El script GNU sed
:
1{
/^[^[:blank:]]/q 1
}
q
Para la línea 1, comprueba si el primer carácter de la línea no es -un espacio en blanco (ni un tabulador )y, si lo es, sale con el estado de salida 1(q 1
). De lo contrario sale con estado de salida cero (el últimoq
).
Una primera línea vacía no coincidirá con /^[^[:blank:]]/
, por lo que ese caso se maneja correctamente.
Si sed
sale con un estado de salida cero, -print
hará que la ruta del archivo se imprima en la salida estándar mediante find
.
Lo equivalente, pero usandoawk
(cualquier awk
servirá):
find. -type f -size +0c -exec awk '/^[^[:blank:]]/ { e=1 } { exit e }' {} ';' -print