Есть ли способ проверить, загрузили ли вы файл ранее или нет, прежде чем загружать его.
Я знаю -
Пожалуйста, предложите способ проверить, является ли файл одинаковым с точки зрения содержимого, прежде чем фактически снова загрузить его ПОЛНОСТЬЮ (независимо от имени файла, в который он будет сохранен).
Чтобы было более точно : я заинтересован в загрузке ТОЛЬКО mp3 файлов, но из разных источников, таких как Jamendo, Soundcloud и т. Д., Которые могут иметь одинаковое содержание (песню), но будут имея разные имена файлов.
Считайте первые 500 байтов первого файла:
head -c 500 file1.mp3 > fragment1
Использование curl -r 0-499 -o fragment2 http://...
для получения первых 500 байтов второго файла. Затем сделайте diff fragment1 fragment2
, чтобы видеть, равны ли они.
curl
инструмент как wget
только с большим количеством опций. Эти -r
флаг позволяет Вам определить диапазон, который приведет к частичной загрузке. wget
имеет опцию квоты, которая, однако, не позволит Вам сделать частичную загрузку.
На основе ответа Jos вот bash
сценарий, который сравнит эти два файла от байта <file_size>-628
к байту <file_size>-129
(последние 500 байтов прежде ID3v1
и ID3v1.1
теги), исключая ID3v1
и ID3v1.1
теги от сравнения. Скопируйте код сценария и вставьте, он в текстовый файл, названный script.sh
(или безотносительно) и в Terminal
, работает chmod a+x <script_path>
для маркировки его как исполняемый файл:
(Примечание: сценарий только работает, если curl
в состоянии определить размер файла)
Использование: < script_path>/script.sh < file_path> < url>
#!/bin/bash
size1=$(du -b "$1" | sed 's/\(.*\)\t/\1/' | tr -cd '[[:digit:]]')
size2=$(curl -I "$2" | grep -i 'content-length' | tr -cd '[[:digit:]]')
dd if="$1" of=partial1 bs=1 skip=$(($size1 - 628)) count=500
curl -r $(($size2 - 628))-$(($size2 - 129)) -o partial2 "$2"
cmp partial1 partial2
rm partial1 partial2