Загрузите файлы со списка с помощью wget

У меня есть файл, который содержит ссылки загрузки как это:

Google.com/image2
Google.com/image3
Google.com/image4
Google.com/image5
Google.com/image6

Я хочу загрузить всех их использующих сценарий. Если имя запускает с' загрузки этот файл к s каталог, если это - b, затем перемещает его в b каталог...

1
задан 15 January 2019 в 15:05

3 ответа

Загрузите все файлы, затем переместите их использующий шарики оболочки:

#!/bin/bash
wget -i /path/to/download_list
mv s* ./s/
mv b* ./b/
  • -i: Считайте URL из локального или внешнего файла.

Вы могли бы получить предупреждение:

mv: cannot move 's' to a subdirectory of itself.

Это прекрасно, можно проигнорировать его, или использование find вместо этого:

#!/bin/bash
wget -i /path/to/download_list
find -maxdepth 1 -iname "s*" -type f -exec mv "{}" ./s \;
find -maxdepth 1 -iname "b*" -type f -exec mv "{}" ./b \;

И с a for цикл, в котором можно работать на всех алфавитах, название сценария, script.sh:

#!/bin/bash
wget -i /path/to/download_list
mkdir -p {a..z}
for l in {a..z};
do
    find -maxdepth 1 -type f -iname "${l}*" -not -iname script.sh -exec mv "{}" "./${l}" \;
done
11
ответ дан 3 December 2019 в 06:18

Дополнение к хорошему ответу @Ravexina.

Решение без цикла:

wget -i /path/to/download_list
mkdir -p {a..z}
# mv the files with rename tool
rename 's/^((.).+)$/$2\/$1/' *
# clean up empty directories
find . -maxdepth 1 -name '[a-z]' -type d -empty -delete
5
ответ дан 3 December 2019 в 06:18

Решение загрузить непосредственно в желаемую папку:

# expand file to list and iterate
for path in $(<"/path/to/download_list"); do
    # get file part of path
    name=$(basename "$path")
    # use first character of name as dir
    dir=${name:0:1}
    # create dir is not exist
    mkdir -p "$dir"
    # download path directly to dir
    wget "$path" -P "$dir"
done
0
ответ дан 3 December 2019 в 06:18

Другие вопросы по тегам:

Похожие вопросы: