
Windows 7 64 ビット PC に Cygwin をインストールしており、wget を使用して大きなファイルを頻繁にダウンロードします。ただし、wget は、Windows 実行可能ファイル (.exe または .msi) の場合、すべてのファイルを実行できない権限で保存します。これらのファイルを自動的に実行できるように権限を設定する方法はありますか? 保存先の既定のディレクトリを変更することもできますか? 現在、ファイルは cygwin フォルダーに保存されていますC:\cygwin64\home\Brenton
が、 に保存したいと思いますC:\Users\Brenton\Downloads
。
わかりやすくするために、これらのファイルを保存した後、手動で目的のディレクトリに移動する方法を知っています(たとえば、次のようにします。
mv filename C:\Users\Brenton\Downloads
ここで、filename は転送する必要があるファイル名です)。また、次の方法で権限を手動で変更する方法も知っています。
chmod 755 filename
しかし、私が欲しいのは、今後 wget 経由でダウンロードされるすべてのファイルが、希望する権限で希望するディレクトリにダウンロードされるような自動的な方法です。
答え1
宛先ディレクトリ
-P prefix
/--directory-prefix=prefix
オプションを使用してwget
、特定のディレクトリに保存するように指示できます。
ディレクトリ プレフィックスを に設定します
prefix
。ディレクトリ プレフィックスは、他のすべてのファイルとサブディレクトリが保存されるディレクトリ、つまり取得ツリーの最上位です。デフォルトは.
(現在のディレクトリ) です。
ダウンロード ディレクトリに 1 つのファイルを保存する例:
wget -p $(cygpath -u "C:\Users\Brenton\Downloads") http://host.name/setup.exe
ファイルの権限
私のシステムでは、 Cygwin ホーム ディレクトリにファイルをダウンロードするときに、ファイルに期待どおりの権限が付与されるようumask
に設定されています。0022
wget
-rw-r--r--
ただし、WindowsDownloads
ディレクトリにダウンロードすると、実行権限が設定されます。理由はわかりませんが、何らかの形で権限が NTFS ACL によって影響されているのではないかと思います。この動作は、システム上でも有利に働く可能性があります。その場合は、次のような単純なシェル エイリアスを使用できます。
alias wget-exe='wget -P $(cygpath -u "C:\Users\Brenton\Downloads") '
推奨シェルスクリプト/関数
wget-exe
それでも権限を変更する必要がある場合は、次のコードをシェル スクリプトまたは関数 ( のような名前)の基礎として使用できます。
#!/bin/sh
downloads=$(cygpath -u "C:\Users\Brenton\Downloads")
wget -P "$downloads" "$@"
dir="$PWD"
cd "$downloads"
chmod 755 *.exe *.msi
cd "$dir"
# Alternative version using find to change permissions of all .msi and .exe files
# downloaded in the last day.
# find "$downloads" -mtime -1 \( -name '*.exe' -o -name '*.msi' \) -print0 | xargs -0 chmod +w