i=0
while true; do
ls | head -5000 > ../files
if [ ! -s ../files ]; then
break
fi
(( i++ )) # Boomer here but feeling younger every day thanks to KamilCuk.
mkdir ../dir$i # I know. No error checking here.
while read filename; do
mv "$filename" ../dir$i # No error checking here either.
done < ../files
done
Этот сценарий становится бесконечным l oop, если mkdir
или mv
неоднократно терпят неудачу. Вы также должны быть осторожны, где вы храните временный файл files
и где вы делаете каталоги назначения; в противном случае следующий ls
должен избегать распознавания выходного каталога предыдущей итерации l oop.
У сценария также возникают проблемы, если имя файла содержит символ новой строки (маловероятно, но просто выполнить sh). И если у вас есть этот вариант использования, то, опять же, этот сценарий введет бесконечный l oop, поскольку команда mv
не будет выполнена, потому что read
не сможет правильно прочитать это имя файла.