내 컴퓨터가 일부 파일을 자동으로 다운로드하기를 원합니다. 이것이 반드시 매우 효율적인 것은 아닙니다. 그래서 저는 이를 위해 bash 스크립트를 사용하기로 결정했습니다.
지금까지 URL을 인코딩할 때 거의 문제가 없었습니다. 하지만 불규칙한 순서로 파일을 검색하고 싶고 간단한 변수를 사용하겠다고 생각했습니다. 변수에 난수를 어떻게 넣나요?
내 방법
data_link0="https://example.com/target1.html"
data_link1="https://example.com/target2.html"
data_link2="https://example.com/target3.html"
data_link3="https://example.com/target4.html"
useragent0="Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A403 Safari/602.1"
useragent1="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6"
useragent3="Mozilla/5.0 (Windows 7; ) Gecko/geckotrail Firefox/firefoxversion"
wget --user-agent="$user_agent[$((RANDOM % 3))]" "$datei_link$((RANDOM % 3))"
불행히도 작동하지 않습니다.
답변1
모든 URL을 검색해야 하는 경우 더 좋은 방법은 다음을 사용하는 것입니다.쉿(GNU/linux coreutils) (또는 sort -R
coreutils):
shuf file | xargs wget
문서:
$ cat file
"https://example.com/target1.html"
"https://example.com/target2.html"
"https://example.com/target3.html"
"https://example.com/target4.html"
man 1 shuf
이름
shuf - 무작위 순열 생성
새로운 의견, 새로운 요구 사항, 새로운 코드:
(임의의 사용자 에이전트 필요)
$ cat uas
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.100
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko
암호:
shuf file | while read url; do
wget --user-agent="$(shuf -n1 uas)" "$url"
done
자신만의 방식으로 유지하려면(URL):
data_link=(
"https://example.com/target1.html"
"https://example.com/target2.html"
"https://example.com/target3.html"
"https://example.com/target4.html"
)
user_agent=(
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A403 Safari/602.1"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6"
"Mozilla/5.0 (Windows 7; ) Gecko/geckotrail Firefox/firefoxversion"
)
wget --user-agent="${user_agent[RANDOM % ${#user_agent[@]} ]}" "${data_link[RANDOM % ${#data_link[@]}]}"
모든 URL 및 사용자 에이전트에 대한 방법(모두 무작위):
for i in $(seq 0 $((${#data_link[@]} -1)) | shuf); do
wget -U "${user_agent[RANDOM % ${#user_agent[@]}]}" "${data_link[i]}"
done
답변2
각 문자열에 대해 별도의 변수를 정의하는 대신 배열을 정의하십시오. ${ar[123]}
배열의 요소 123에 액세스 ar
하고 ${#ar[@]}
배열의 크기를 가져오는 데 사용됩니다 .
data_link=(
"https://example.com/target1.html"
"https://example.com/target2.html"
"https://example.com/target3.html"
"https://example.com/target4.html"
)
user_agent=(
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A403 Safari/602.1"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6"
"Mozilla/5.0 (Windows 7; ) Gecko/geckotrail Firefox/firefoxversion"
)
wget --user-agent="${user_agent[RANDOM % ${#user_agent[@]}]}" "${data_link[RANDOM % ${#data_link[@]}]}"