Поиск по всей системе файлов с определенным индексом [дубликат]

${string:offset:length}es un operador de expansión de parámetros que se expande al rango de caracteres en la variable $string.

Para obtener un rango de bytes de la entrada (y eso también se aplicaría a caracteres de un solo -byte ), puede usar:

func | tail -c +12 | head -c 5

para obtener 5 bytes comenzando con el 12 (1 -compensaciones basadas ). La opción -ca headno es estándar pero es bastante común.

Tenga en cuenta que funcpuede eliminarse en algún momento después de que haya generado su byte 16, ya que headsaldrá después de haber generado esos 5 bytes, y tailsería eliminado si intenta escribir más datos después de eso, que se extendería a func.

También puedes hacer:

func | dd bs=1 skip=11 count=5 2> /dev/null

2> /dev/nulles para evitar el mensaje de estado al final. Sin embargo, eso suprime todos los errores. Con GNU dd, puede reemplazarlo con status=nonepara suprimir solo el estado.

Para valores grandes de length, eso sería menos eficiente ya que lee un byte a la vez. Con GNU ddnuevamente, puede evitar eso haciendo:

func | dd iflag=count_bytes,skip_bytes,fullblock skip=11 bs=64k count=5M status=none

Lo que haría tantas lecturas de hasta 64KiB cada una para obtener 5MiB bytes de datos.

Ahora, para que el desplazamiento y la longitud se expresen en caracteres (uno o varios -bytes )en lugar de bytes, eso se vuelve más complicado.

Una opción es almacenar toda la salida en una variable y usar el ${var:offset:length}operador como otros han mostrado . Aunque eso significa almacenar toda la salida en la memoria. Usar var=$(func)también significa que los caracteres finales de nueva línea se descartan.

Otra opción es usar bash's read -Nque lee un número dado de caracteres:

func | {
  IFS= read -rN 11 discarded
  IFS= read -rN 5 data
  printf '%s\n' "$data"
}

O conperl(un poco más eficiente para grandes datos):

func | perl -Mopen=locale -sne '
  BEGIN{$total = $o + $n; $/ = \$total}
  print substr($_, $o); exit' -- -o=10000 -n=5000000

0
24.05.2019, 15:11
1 ответ

Вы можете использовать команду findс аргументом -inumс номером инода, как показано ниже

Пример-

touch /home/ajeet/original_file.txt
ln /home/ajeet/original_file.txt /root/hard_link_file.txt

ls -li /root/hard_link_file.txt
1704088 -rw-r--r-- 2 root root 0 May 24 18:24 /root/hard_link_file.txt

ls -li /home/ajeet/original_file.txt
1704088 -rw-r--r-- 2 root root 0 May 24 18:24 /home/ajeet/original_file.txt

find / -inum 1704088
/home/ajeet/original_file.txt
/root/hard_link_file.txt
1
28.01.2020, 02:22

Теги

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