scp: Как скопировать только последние 10% файла?

7

У меня относительно большой лог-файл (46M) на vServer, который мне интересен только в самой последней части.

Как я могу скачать только последние 10% файла?

Сервер работает под управлением Debian, и я использую Ubuntu локально.

n.st
источник
3
Вы отметили пост с rsync. Почему бы вам просто не загрузить весь файл и не использовать его rsyncдля периодического обновления с сервера? (Файлы журналов также хорошо сжимаются, поэтому rsync -zвам нужно всего лишь загрузить 4-5 МБ для всего файла журнала .)
grawity

Ответы:

18

Сначала получите размер удаленного файла в байтах:

$ ssh user@host 'stat -c%s FILENAME'    
50000

Подсчитайте 10% от этого числа и скопируйте последние десять процентов:

$ ssh user@host 'tail -c 5000 FILENAME' > DESTINATION
Флимм
источник
1
Отлично. :) Есть ли stat -c%sкакое-то преимущество перед du -b?
13
2
Я думаю, что можно даже объединить эти команды, чтобы уменьшить читабельность и сохранить одно соединение SSH:ssh user@host 'f=FILENAME; tail -c $(($(stat -c%s $f)/10)) $f' > DESTINATION
n.st
2
@ n.st: оба они в конечном итоге используют один и тот же stat()системный вызов, что очень быстро, хотя duтакже проверяет все подключенные файловые системы, используемые stat()перед фактическим файлом. Но это не разница на практике. ⫽ Однако, если вам нужно получить только байты (как в однострочнике в вашем последнем комментарии), тогда запуск statбудет проще, потому что он не выведет ненужное имя файла, что сделает однострочник короче, чем это было бы с du -b | sed ....
grawity