Разделить содержимое каталога на несколько подкаталогов

10

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

Aneeez
источник
Дубликат unix.stackexchange.com/questions/63265/… (это не относится к Ubuntu).
Камиль Гудесюн

Ответы:

23

следующее сработало хорошо для меня. Откройте каталог в терминале и просто скопируйте и вставьте следующий скрипт, нажмите Enter. внутри будут создаваться подкаталоги с именами dir_001, dir_002 и так далее.

i=0; 
for f in *; 
do 
    d=dir_$(printf %03d $((i/100+1))); 
    mkdir -p $d; 
    mv "$f" $d; 
    let i++; 
done
Aneeez
источник
Это было отмечено как низкое качество. Поскольку вы являетесь ОП, не могли бы вы объяснить, что вы сделали?
Муру
1
сделанный. Добавили объяснение.
Aneeez
1

Переместить фиксированное количество файлов, используя массив с диапазоном и смещением.

#!/bin/bash

shopt -s nullglob

a=(./src/*)
for ((i=0; i<${#a[@]}; i+=100)); do
    printf -v b ./img_%03d $((++n))
    mkdir -p $b && mv -t $b "${a[@]:$i:100}"
done
bac0n
источник
0

Это подскажет вам, сколько каталогов вы хотите и префикс подкаталога. Команда ls - это просто напоминание о том, сколько у вас файлов.

ls -1 | wc -l

read -p 'How Many Directories: ' F;
read -p 'Sub-Directories Prefix: ' S;

PARRENT=${PWD}
# cd $PARRENT 
n=0
for i in *
do
  if [ $((n+=1)) -gt $F ]; then
    n=1
  fi
  todir=$PARRENT/"$S"_$n
  [ -d "$todir" ] || mkdir "$todir" 
  mv "$i" "$todir" 
done

Источник: https://www.unix.com/shell-programming-and-scripting/248539-split-folder-huge-number-files-n-folders.html

Bourehim Юссеф
источник
Боюсь, это вызовет проблемы, если в текущем каталоге есть пробелы в пути, но я могу ошибаться.
Вэл говорит восстановить Монику