Это может быть не только начало файла, который вам нужно прочитать:
Для чтения других частей, кроме первого, вы можете использовать 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-записями».
Общие веб-серверы поддерживают «диапазон» в целом, но возможно, что по какой-либо причине отключен (например, он не поддерживается пользовательский сервер, или он не работает, потому что между ними есть диапазон )
. В этом случае мы не можем избежать загрузки данных до интересующей нас части но тогда мы можем вырезать нужную нам часть байтами или строками:
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-серверу необходимо будет прочитать весь файл, включая часть перед диапазоном, для подсчета номеров строк.
вы можете использовать команду «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/ \;
вы можете использовать команду «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/ \;
вы можете использовать команду «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/ \;