curl
の使用を検討してください wget
の代わりに :
curl -o "$file" -z "$file" "$uri"
man curl
言います:
-z
/--time-cond
<日付式>
(HTTP/FTP) 指定された日時より後に変更されたファイル、または指定された日時より前に変更されたファイルを要求します。日付式はあらゆる種類の日付文字列にすることができますが、内部のものと一致しない場合は、代わりに指定されたファイル名から時刻を取得しようとします。
$file
の場合 -z
を利用する必要があります。 test -e "$file"
を使用して条件付きフラグを立てる :
if test -e "$file"
then zflag="-z '$file'"
else zflag=
fi
curl -o "$file" $zflag "$uri"
( $zflag
の展開を引用しないことに注意してください ここでは、0 または 2 トークンに分割する必要があるためです)。
シェルが配列 (Bash など) をサポートしている場合は、より安全でクリーンなバージョンがあります:
if test -e "$file"
then zflag=(-z "$file")
else zflag=()
fi
curl -o "$file" "${zflag[@]}" "$uri"
wget スイッチ -N
ファイルが変更された場合にのみファイルを取得するため、可能なアプローチは単純な -N
を使用することです 必要に応じてファイルを取得しますが、間違った名前のままにします。次に、ln -P
を使用してハード リンクを作成します。 コマンドを実行して、正しい名前の「ファイル」にリンクします。リンクされたファイルには、元のファイルと同じメタデータがあります。
唯一の制限は、ファイル システムの境界を越えてハード リンクを作成できないことです。
curl コマンドをラップするための Python 3.5+ スクリプト:
import argparse
import pathlib
from subprocess import run
from itertools import chain
parser = argparse.ArgumentParser()
parser.add_argument('url')
parser.add_argument('filename', type=pathlib.Path)
args = parser.parse_args()
run(chain(
('curl', '-s', args.url),
('-o', str(args.filename)),
('-z', str(args.filename)) if args.filename.exists() else (),
))
Android デバイスから USB テザリングを取得して Debian 8 で動作させる
プロンプトなしでスクリプトの ssh-copy-id を介してリモート マシンに ssh キーをコピーしますか?