実際にダウンロードする前に、以前にファイルをダウンロードしたことがあるかどうかを確認する方法はありますか。
私は知っています-
ファイルを完全に再度ダウンロードする前に、ファイルの内容が同じかどうかを確認する方法を提案してください(保存先のファイル名とは関係ありません)。
より正確に:mp3ファイルのみをダウンロードすることに興味がありますただし、Jamendo、Soundcloudなど、同じコンテンツ(曲)を持っていてもファイル名が異なるさまざまなソースからのものです。
最初のファイルの最初の500バイトを読み取ります。
head -c 500 file1.mp3 > fragment1
curl -r 0-499 -o fragment2 http://...
を使用して、2番目のファイルの最初の500バイトを取得します。次に、diff fragment1 fragment2
を実行して、それらが等しいかどうかを確認します。
curl
はwget
のようなツールで、オプションが増えています。 -r
フラグを使用すると、範囲を指定できます。これにより、部分的にダウンロードされます。 wget
にはクォータオプションがありますが、部分的なダウンロードはできません。
Josの回答に基づいて、バイト<file_size>-628
からバイト<file_size>-129
(ID3v1
およびID3v1.1
タグの前の最新の500バイト)までの2つのファイルを比較するbash
スクリプトを次に示します。ただし、比較から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