Как переместить большое количество zip-файлов в каталоге в указанное количество нескольких подкаталогов в bash?

В текущем каталоге есть много сотен файлов .zip. Также в этом каталоге есть шесть подкаталогов с именами от 0 до 5. Файлы .zip должны быть равномерно распределены (или как можно ближе) и перемещены в эти подкаталоги. Мне все равно, какие файлы попадают в какие подкаталоги, если они распределены равномерно.

Как я пытаюсь этого добиться. Должен ли я использовать maxdepth и попытаться найти количество подкаталогов, а затем рекурсивно разместить файлы или как мне это сделать?


person Shreyas S C    schedule 20.04.2016    source источник
comment
Извините, что вы хотите? У вас есть каталог, полный zip-файлов, и вы хотите переместить их все в определенные каталоги на основе какой-либо метрики? Пожалуйста, будьте более подробными.   -  person chw21    schedule 20.04.2016
comment
В текущем каталоге есть много сотен файлов .zip. Также в этом каталоге есть шесть подкаталогов с именами от 0 до 5. Файлы .zip должны быть равномерно распределены (или как можно ближе) и перемещены в эти подкаталоги. Мне все равно, какие файлы попадают в какие подкаталоги, если они распределены равномерно.   -  person Shreyas S C    schedule 20.04.2016
comment
Являются ли имена zip-файлов уникальными? Если нет, то как бы вы это сделали?   -  person Ezequiel Tolnay    schedule 20.04.2016
comment
printf '%s\0' *.zip | xargs -0 -n 6 bash -c 'mv "$0" 0; mv "$1" 1; mv "$2" 2; mv "$3" 3; mv "$4" 4; mv "$5" 5'; где имена каталогов {0..5}   -  person anishsane    schedule 20.04.2016


Ответы (1)


Вот быстрое и грязное решение: для каждого zip-файла увеличьте номер целевого каталога на единицу, а затем переместите его туда.

Если номер целевого каталога больше недоступен, сбросьте номер целевого каталога.

#!/usr/bin/env bash

declare -i i=0
for f in *.zip; do
    mv ${f} ${i}/
    i=$i+1
    if [[ ! -d $i ]]; then
        i=0 
    fi
done

Теперь обратите внимание, что это вовсе не надежно, и для каждого файла создается отдельный процесс перемещения. Если вам нужно сделать это только один раз, я думаю, не стоит тратить на это больше мозговых клеток, чем на это. Однако, если вы хотите делать это на регулярной основе, вам следует подумать о том, какие ошибки могут возникнуть и как их поймать, и, возможно, даже подумать о более эффективных движениях.

person chw21    schedule 20.04.2016