Teilen Sie den Inhalt eines Verzeichnisses in mehrere Unterverzeichnisse auf


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

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

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.