Teilen Sie den Inhalt eines Verzeichnisses in mehrere Unterverzeichnisse auf

10

Ich habe ein Verzeichnis, das mehr als tausend Bilder enthält. Ich möchte die Dateien in mehrere Unterverzeichnisse aufteilen, die jeweils 100 Dateien enthalten. Wie mache ich das?

Aneeez
quelle
Duplikat von unix.stackexchange.com/questions/63265/… (dies ist nicht Ubuntu-spezifisch).
Camille Goudeseune

Antworten:

23

Folgendes hat bei mir gut funktioniert. Öffnen Sie das Verzeichnis im Terminal, kopieren Sie das folgende Skript und fügen Sie es ein. Drücken Sie die Eingabetaste. Unterverzeichnisse werden mit den Namen dir_001, dir_002 usw. erstellt.

i=0; 
for f in *; 
do 
    d=dir_$(printf %03d $((i/100+1))); 
    mkdir -p $d; 
    mv "$f" $d; 
    let i++; 
done
Aneeez
quelle
Dies wurde als minderwertig gekennzeichnet. Können Sie als OP eine Erklärung hinzufügen, was Sie getan haben?
Muru
1
getan. Habe eine Erklärung hinzugefügt.
Aneeez
1

Verschieben Sie eine feste Anzahl von Dateien mithilfe eines Arrays mit Bereich und Versatz.

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

Dadurch werden Sie aufgefordert, die Anzahl der gewünschten Verzeichnisse und das Präfix des Unterverzeichnisses anzugeben. Der Befehl ls ist nur eine Erinnerung daran, wie viele Dateien Sie haben.

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

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

Bourehim Youssef
quelle
Ich befürchte, dass dies Probleme verursachen wird, wenn das aktuelle Verzeichnis Leerzeichen im Pfad enthält, aber ich könnte mich irren.
Val sagt Reinstate Monica