Как сделать scp-файлы размером менее x?

Это может быть не только начало файла, который вам нужно прочитать:

Использовать диапазон содержимого HTTP

Для чтения других частей, кроме первого, вы можете использовать HTTP-запрос для диапазона, например, с опцией --range в curl, чтобы получить часть файла из некоторой позиции байта в другую:

curl --range 500-700 ...

Что касается формата файла CSV - вы могли бы использовать другие части , получить эту часть и отредактировать ее вручную, чтобы удалить частичные строки данных.

отредактируйте его вручную , чтобы посмотреть 500 байтов / символов, начиная с байта 50000:

URL="http://datagov.ic.nhs.uk/presentation/2014_03_March/T201403PDPI+BNFT.CSV" curl --range 50000-50500 "$URL"

2.79,0000030,201403,                  
Q44,RXA,Y00327,1108010F0AAABAB,Hypromellose_Eye Dps 0.5%               ,0000001,00000000.81,00000000.76,0000010,201403,                  
Q44,RXA,Y00327,110801000BLAPA0,Blephasol_Lot                           ,0000001,00000007.53,00000006.97,0000100,201403,                  
Q44,RXA,Y00327,110801000BLAQA0,Blephaclean_Eye Lid Wipe                ,0000001,00000010.68,00000009.89,0000040,201403,                  
Q44,RXA,Y00327,1201010F0BBAAAA,Locorten-Viof$   

Обратите внимание, что первая и последняя строка отключены, так как фактическая часть файла была «всего лишь некоторым текстом» файла, а не «некоторыми CSV-записями».

Когда Range не поддерживается

Общие веб-серверы поддерживают «диапазон» в целом, но возможно, что по какой-либо причине отключен (например, он не поддерживается пользовательский сервер, или он не работает, потому что между ними есть диапазон )

. В этом случае мы не можем избежать загрузки данных до интересующей нас части но тогда мы можем вырезать нужную нам часть байтами или строками:

URL="http://datagov.ic.nhs.uk/presentation/2014_03_March/T201403PDPI+BNFT.CSV" curl -s "$URL" | head -c 50500 | tail -c 500

2.79,0000030,201403,                  
Q44,RXA,Y00327,1108010F0AAABAB,Hypromellose_Eye Dps 0.5%               ,0000001,00000000.81,00000000.76,0000010,201403,                  
Q44,RXA,Y00327,110801000BLAPA0,Blephasol_Lot                           ,0000001,00000007.53,00000006.97,0000100,201403,                  
Q44,RXA,Y00327,110801000BLAQA0,Blephaclean_Eye Lid Wipe                ,0000001,00000010.68,00000009.89,0000040,201403,                  
Q44,RXA,Y00327,1201010F0BBAAAA,Locorten-Viof$   
[d29 ] То же самое!

Считывание по строке

Для получения строк вместо символов используйте -n вместо -c. Для строк от 100 до 110 («последние 10 строк строк до 110»):

URL="http://datagov.ic.nhs.uk/presentation/2014_03_March/T201403PDPI+BNFT.CSV" curl -s "$URL" | head -n 110 | tail -n 10

Q44,RXA,Y00327,0206030Y0AAAAAA,Ivabradine_Tab 5mg                      ,0000001,00000020.09,00000018.68,0000028,201403,                  
Q44,RXA,Y00327,0208010W0AAAIAI,Tinzaparin Sod_Inj 20 000u/ml 0.7ml Pfs ,0000003,00000154.77,00000143.20,0000013,201403,                  
Q44,RXA,Y00327,0208010W0AAANAN,Tinzaparin Sod_Inj 10 000u/ml 2ml Vl    ,0000001,00000021.13,00000019.65,0000002,201403,                  
Q44,RXA,Y00327,0208020V0AAAAAA,Warfarin Sod_Tab 1mg                    ,0000002,00000001.34,00000001.37,0000042,201403,                  
Q44,RXA,Y00327,0209000A0AAAJAJ,Aspirin_Tab 75mg                        ,0000001,00000000.12,00000000.22,0000004,201403,                  
Q44,RXA,Y00327,0211000P0AAACAC,Tranexamic Acid_Tab 500mg               ,0000001,00000006.31,00000005.85,0000060,201403,                  
Q44,RXA,Y00327,0212000Y0AAADAD,Simvastatin_Tab 40mg                    ,0000001,00000000.17,00000000.27,0000004,201403,                  
Q44,RXA,Y00327,0301011R0AAAPAP,Salbutamol_Inha 100mcg (200 D) CFF      ,0000037,00000058.50,00000054.54,0000039,201403,                  
Q44,RXA,Y00327,0301011R0BEAIAP,Ventolin_Evohaler 100mcg (200 D)        ,0000014,00000021.00,00000019.59,0000014,201403,                  
Q44,RXA,Y00327,0301011V0BBAMAL,Bricanyl_Turbohaler 500mcg (100 D)      ,0000001,00000006.92,00000006.41,0000001,201403,

Теперь, когда CSV-записи являются строками, у нас есть чистый старт и конец раздела.

HTTP Content-Range не поддерживает использование диапазонов строк; HTTP-серверу необходимо будет прочитать весь файл, включая часть перед диапазоном, для подсчета номеров строк.

11
задан 14 July 2017 в 05:02

3 ответа

вы можете использовать команду «rsync», которая имеет возможность контролировать размер файла, подлежащего исключению.

rsync -rv --max-size=100m /path/in/local/ server:~/project/

from 'man rsync',

--max-size=SIZE    don't transfer any file larger than SIZE

Обновленный ответ: просто исключите файлы журнала с параметром «rsync» --exclude, как показано ниже

rsync -rv --exclude='*.log' --max-size=100m /path/in/local/ server:~/project/

, или вы можете использовать комбинацию команд «find» с «scp» и указать ограничение размера файла с помощью опции -size. используйте ! -name '*.log', чтобы исключить определенные файлы с помощью «log».

find /path/in/local -type f ! -name '*.log' -size -100m -exec scp '{}' server:~/project/ \;
26
ответ дан 22 May 2018 в 20:35
  • 1
    Примечание для OP: rsync похоже на scp, но более эффективное, поскольку оно переносит только изменения, если файл изменен. – Paddy Landau 19 July 2017 в 15:46

вы можете использовать команду «rsync», которая имеет возможность контролировать размер файла, подлежащего исключению.

rsync -rv --max-size=100m /path/in/local/ server:~/project/

from 'man rsync',

--max-size=SIZE don't transfer any file larger than SIZE

Обновленный ответ: просто исключите файлы журнала с параметром «rsync» --exclude, как показано ниже

rsync -rv --exclude='*.log' --max-size=100m /path/in/local/ server:~/project/

, или вы можете использовать комбинацию команд «find» с «scp» и указать ограничение размера файла с помощью опции -size. используйте ! -name '*.log', чтобы исключить определенные файлы с помощью «log».

find /path/in/local -type f ! -name '*.log' -size -100m -exec scp '{}' server:~/project/ \;
26
ответ дан 18 July 2018 в 10:20

вы можете использовать команду «rsync», которая имеет возможность контролировать размер файла, подлежащего исключению.

rsync -rv --max-size=100m /path/in/local/ server:~/project/

from 'man rsync',

--max-size=SIZE don't transfer any file larger than SIZE

Обновленный ответ: просто исключите файлы журнала с параметром «rsync» --exclude, как показано ниже

rsync -rv --exclude='*.log' --max-size=100m /path/in/local/ server:~/project/

, или вы можете использовать комбинацию команд «find» с «scp» и указать ограничение размера файла с помощью опции -size. используйте ! -name '*.log', чтобы исключить определенные файлы с помощью «log».

find /path/in/local -type f ! -name '*.log' -size -100m -exec scp '{}' server:~/project/ \;
26
ответ дан 24 July 2018 в 19:33

Другие вопросы по тегам:

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