Необходимо переместить каждые 5000 файлов в новую папку, используя пакетный скрипт - PullRequest
0 голосов
/ 17 января 2020

У меня есть папка с> 10000000 файлов, необходимо переместить их в отдельную папку по 5000 каждый. Используя пакетный скрипт, как мне переместить их в отдельные папки?

1 Ответ

0 голосов
/ 17 января 2020
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 не сможет правильно прочитать это имя файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...