Искать все файлы, содержащие только строку определенной длины

Я бы избегал любых арифметических операций и использовал - gauge , как указано в документации («новые проценты считываются со стандартного ввода»):

for ((i=0;i<=100;i+=10)); do echo $i; sleep 1; done | dialog --gauge "Please wait 10 seconds." 0 0
4
22.05.2018, 13:31
3 ответа

Con GNU awkpara 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)
5
27.01.2020, 20:46
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
1
27.01.2020, 20:46

Вы ищете файлы длиной 9 байт, восемью символами и новой строкой. Это предполагает, что вы ищете только однобайтовые символы -.

find. -type f -size 9c -exec grep -l -E '^.{8}$' {} +

Это находит все обычные файлы в текущем каталоге или ниже, которые имеют длину ровно 9 байт. Чтобы убедиться, что они содержат только одну строку, мы выполняем над ними grepи пытаемся сопоставить строку, содержащую ровно восемь символов. Мы позволяем grepвыводить имена соответствующих файлов с опцией -l.

7
27.01.2020, 20:46

Теги

Похожие вопросы