У меня есть 200k папка файлов, которую я хочу разделить на 25k использование папок файлов cp
или любая другая команда CLI, которая могла сделать вещь
Я использовал эту команду:
files=(*);
num=$((${#files[@]}/8));
k=1
for ((i=0; i<${#files[@]}; i+=$num)); do
tar cvzf files$k.tgz -- "${files[@]:$i:$num}"
((k++))
done
из этого сообщения: Как к tar.gz много файлов подобного размера в несколько архивов с пределом размера, совместно использованным Jacob Vlijm. Это сжимает все файлы в нескольких .tgz
файлы так, чтобы было хорошо для меня. Можно изменить число для деления, здесь 8 дает мне 8 сжатых файлов с 25k файлами внутри + 1 сжатый файл только с 2 файлами внутри. Это сделало задание для меня.
Можно использовать команду 'находки' с xargs и передачу много команды, чтобы сначала считать значение из файла и установить его на переменную, которая мы будем использовать его в новом имени каталога как идентификатор и затем создавать тот каталог, затем перемещают файлы в него и увеличивают идентификатор, противостоят и сохраняют его в файле для хранения последнего значения его.
вот команда,
find -maxdepth 1 -type f |xargs -n25000 bash -c 'readID=$(< ../ID.txt); echo mkdir directory_$readID; echo mv -v $@ -t directory_$readID/; echo $(expr ${readID} + 1)> ../ID.txt'
P.s. отмечают, что запишите идентификатор запуска в файле ID.txt прежде, чем выполнить вышеупомянутую команду
echo "1" > ../ID.txt
этот ID.txt, каждый выравнивает из текущего рабочего каталога.
после того как Вы проверили команду и видели то, что продолжает быть, происходят, затем удаляют команду 'эха' из этой команды'echo mv -v $@ -t directory_$readID/;
'и позади 'mkdir', чтобы выполнить фактическое перемещение и сбросить ID.txt
echo "1" > ../ID.txt
Вы могли смолить дерево каталогов, "разделить" его, и "кошка" оно назад вместе.
Это могло бы помочь. Не проверенный команды, но я помню, что это работает, от 400 лет назад.
https://unix.stackexchange.com/questions/1588/break-a-large-file-into-smaller-pieces