Вместо определения отдельных переменных для каждой строки определите массив. Используйте ${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[@]}]}"
Простое решение для достижения требуемого состояния. Вы можете использовать следующие 2 команды:
rsync -auv b/ c/
rsync -av a/ c/
PROS:работает рекурсивно для всех под-дерева каталогов.
МИНУСЫ:в период времени с момента запуска первой команды и до окончания выполнения второй команды некоторые более новые файлы из "b/" имеющие аналог в "a/" могут быть временно помещены в "c /", пока они не будут заменены правильными файлами из "a/" второй командой.
Итак, решение хорошее, только если:
Вы можете использовать Makefile
для начала.
Я немного протестировал его с помощью GNU Make 4.2.1. Я не знаю, будет ли это работать с другими версиями Make. Я знаю, что это не удастся, если в a
или b
есть подкаталог. Возможно есть и другие подводные камни.
.PHONY: all
SRCA = a
SRCB = b
DEST = c
# create list of targets from wildcard lists of both sources
TARGETS = $(patsubst $(SRCA)/%,$(DEST)/%,$(wildcard $(SRCA)/*)) $(patsubst $(SRCB)/%,$(DEST)/%,$(wildcard $(SRCB)/*))
all: $(TARGETS)
# GNU Make prefers the first matching pattern rule because both rules lead to the same stem length
$(DEST)/%:$(SRCA)/%
cp "$<" "$@"
# alternative pattern rule if the first one does not match
$(DEST)/%:$(SRCB)/%
cp "$<" "$@"