Перебрать каталог, но пропустить последний файл

for i in {1..3}; do
    for j in {10..20}; do
        (wget http://example.com/"$i-$j".jpg &)
    done
done

Я даже проверял...

0
08.11.2019, 14:56
3 ответа

Вы можете использовать параметр -t команды ls для сортировки файлов по модификациям. В сочетании с командой tail вы можете распечатать все файлы, кроме первого. Примерно так:

ls -t | tail -n +2

В цикле это может выглядеть так:

for my_file in $(ls -t | tail -n +2); do upload $my_file; rm $my_file; done
0
28.01.2020, 02:29

Используя оболочку zshи предполагая, что ваша команда загрузки называется uploadи принимает все файлы в виде списка в своей командной строке:

upload./*(.Dom[2,-1])

Квалификатор glob (.Dom[2,-1]))заставляет предшествующий шаблон подстановки(*)соответствовать только обычным файлам (с использованием квалификатора .glob и включая скрытые такие файлы с использованием квалификатора Dglob ), и расширение шаблона не будет содержать самый последний измененный файл(omуказывает оболочке сортировать файлы по метке времени модификации, и [2,-1]выберет все, кроме первого в результирующем списке ).

Затем вы можете использовать тот же шаблон для удаления переданных файлов или использовать цикл:

for name in./*(.Dom[2,-1]); do
    upload $name
    rm -f $name
done

Это должно обрабатывать все типы имен файлов, включая имена файлов со встроенными пробелами, табуляцией или новой строкой.

2
28.01.2020, 02:29
# find the latest file

latestf="$(ls -t /directory/*|head -1)";

# loop over files now

for f in /directory/* ; do 
    if [[ "${f}" == "${latestf}" ]];then
        echo "skipping file [${f}]";
    else
        echo "processing file [${f}]";
        # your upload cmd here
    fi
done
0
28.01.2020, 02:29

Теги

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