Diviser le contenu d'un répertoire en plusieurs sous-répertoires

10

J'ai un répertoire qui contient plus de mille images. Je souhaite diviser les fichiers en plusieurs sous-répertoires, chacun contenant 100 fichiers. Comment puis-je faire cela?

Aneeez
la source
Duplicate of unix.stackexchange.com/questions/63265/… (ce n'est pas spécifique à Ubuntu).
Camille Goudeseune

Réponses:

23

ce qui suit a bien fonctionné pour moi. Ouvrez le répertoire dans le terminal, et copiez et collez simplement le script suivant, appuyez sur Entrée. des sous-répertoires seront créés à l'intérieur avec les noms dir_001, dir_002 et ainsi de suite.

i=0; 
for f in *; 
do 
    d=dir_$(printf %03d $((i/100+1))); 
    mkdir -p $d; 
    mv "$f" $d; 
    let i++; 
done
Aneeez
la source
Cela a été signalé comme de faible qualité. Puisque vous êtes l'OP, pourriez-vous ajouter une explication de ce que vous avez fait?
muru
1
terminé. Ont ajouté une explication.
Aneeez
1

Déplacez un nombre fixe de fichiers à l'aide d'un tableau avec plage et décalage.

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

Cela vous demandera combien de répertoires vous voulez et le préfixe du sous-répertoire. La commande ls n'est qu'un rappel du nombre de fichiers dont vous disposez.

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

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

bourehim youssef
la source
Je crains que cela ne cause des problèmes si le répertoire actuel contient des espaces dans le chemin, mais je peux me tromper.
val dit Réintégrer Monica le