Dividi i contenuti di una directory in più sottodirectory


Risposte:


23

quanto segue ha funzionato bene per me. Apri la directory nel terminale e copia e incolla il seguente script, premi invio. le sottodirectory verranno create all'interno con nomi dir_001, dir_002 e così via.

i=0; 
for f in *; 
do 
    d=dir_$(printf %03d $((i/100+1))); 
    mkdir -p $d; 
    mv "$f" $d; 
    let i++; 
done

Questo è stato segnalato come di bassa qualità. Dato che sei il PO, potresti aggiungere una spiegazione di ciò che hai fatto?
Muru,

1
fatto. Ho aggiunto una spiegazione.
Aneeez,

1

Sposta il numero fisso di file usando l'array con intervallo e offset.

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

Questo ti chiederà quante directory vuoi e il prefisso della sottodirectory. Il comando ls è solo un promemoria di quanti file hai.

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


Temo che ciò causerà problemi se la directory corrente ha spazi nel percorso, ma potrei sbagliarmi.
dice Val Reinstate Monica l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.