Dividir o conteúdo de um diretório em vários subdiretórios

10

Eu tenho um diretório que contém mais de mil imagens. Quero dividir os arquivos em vários subdiretórios, cada um contendo 100 arquivos. Como eu faço isso?

Aneeez
fonte
Duplicado de unix.stackexchange.com/questions/63265/… (isso não é específico do Ubuntu).
Camille Goudeseune

Respostas:

23

o seguinte funcionou bem para mim. Abra o diretório no terminal e apenas copie e cole o seguinte script, pressione enter. subdiretórios serão criados dentro com nomes dir_001, dir_002 e assim por diante.

i=0; 
for f in *; 
do 
    d=dir_$(printf %03d $((i/100+1))); 
    mkdir -p $d; 
    mv "$f" $d; 
    let i++; 
done
Aneeez
fonte
Isso foi sinalizado como baixa qualidade. Como você é o OP, você poderia adicionar uma explicação do que fez?
muru
11
feito. Adicionaram uma explicação.
Aneeez
1

Mova um número fixo de arquivos usando a matriz com intervalo e deslocamento.

#!/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
fonte
0

Isso solicitará quantos diretórios você deseja e o prefixo do subdiretório. O comando ls é apenas um lembrete de quantos arquivos você possui.

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

Fonte: https://www.unix.com/shell-programming-and-scripting/248539-split-folder-huge-number-files-n-folders.html

bourehim youssef
fonte
Receio que isso cause problemas se o diretório atual tiver espaços no caminho, mas posso estar errado.
val diz Reintegrar Monica