Я бы избегал любых арифметических операций и использовал - gauge
, как указано в документации («новые проценты считываются со стандартного ввода»):
for ((i=0;i<=100;i+=10)); do echo $i; sleep 1; done | dialog --gauge "Please wait 10 seconds." 0 0
Con GNU awk
para encontrar archivos regulares que contengan solo una línea, que contengan exactamente 8 caracteres (sin contar el carácter de nueva línea, si lo hay):
find. -type f -size +7c -size -50c -exec gawk '
BEGINFILE {p = 0}
FNR == 1 && length == 8 {p = 1}
FNR == 2 {p = 0; nextfile}
ENDFILE {if (p) print FILENAME}' {} +
Con find, restringimos a archivos cuyo tamaño está entre 8 y 49 bytes. 8 para un archivo con 8 caracteres de un -byte y sin nueva línea, 49 para 8 6 -caracteres de byte (el máximo en UTF -8, es posible que desee adaptarlo para otros juegos de caracteres )y un nueva línea.
O conzsh
:
has_one_line_of_8_characters() {
local c
! read -ru0 -k10 c && [[ $c =~ $'^[^\n]{8}\n?$' ]]
} < ${1-$REPLY}
printf '%s\n' **/*(.DL+7L-50+has_one_line_of_8_characters)
gawk '/^.{9}$/{print FILENAME}' RS='\0' *
Elegí 9 caracteres, porque los 8 caracteres y el carácter de nueva línea al final de la línea = 9 caracteres en total. Si necesita estrictamente 8 caracteres con la nueva línea incluida, debe usar el número 8 en el patrón.
Pruebas
Tengo cuatro archivos en la carpeta de prueba:
$ tail -n +1 -- *
==> 11_chars <==
zzzzzzzzzz
==> 5_chars <==
zzzz
==> 7_chars <==
zzzzzz
==> 9_chars <==
zzzzzzzz
Salida
$ gawk '/^.{9}$/{print FILENAME}' RS='\0' *
9_chars
Вы ищете файлы длиной 9 байт, восемью символами и новой строкой. Это предполагает, что вы ищете только однобайтовые символы -.
find. -type f -size 9c -exec grep -l -E '^.{8}$' {} +
Это находит все обычные файлы в текущем каталоге или ниже, которые имеют длину ровно 9 байт. Чтобы убедиться, что они содержат только одну строку, мы выполняем над ними grep
и пытаемся сопоставить строку, содержащую ровно восемь символов. Мы позволяем grep
выводить имена соответствующих файлов с опцией -l
.