Esse script recebe dois argumentos (opcionais), o diretório a ser particionado e o tamanho da partição. Como você não disse se deseja mover arquivos ou mover tudo, presumi que você queria dizer arquivos, então usei o comando find.
Alguns comentários,
- Se você não especificou shell, algo assim é mais facilmente feito em perl, ruby ou python.
- localizar com o maxdepth 1 faz apenas o diretório
- você pode mover os arquivos para qualquer lugar, basta alterar a nomenclatura da pasta
- desde que o find é usado, você pode adicionar -name, -mtime, -ctime, etc.
Copysome.sh,
#!/bin/bash
path=${1:-"."} #directory to start
howmany=${2:-20} #partition size
pushd $path; #move there
part=1; #starting partition
LIST="/usr/bin/find -maxdepth 1 -type f" #move only files?
#LIST="ls" #move everything #be careful, $folder will get moved also :-)
count='$LIST |/usr/bin/wc -l'; #count of files to move
while [ $count -gt 0 ]; do
folder="folder-$part";
if [ ! -d $folder ]; then /usr/bin/mkdir -p $folder; fi
/usr/bin/mv '$LIST |/usr/bin/sort |/usr/bin/head -$howmany' $folder/.
count='$LIST |/usr/bin/wc -l'; #are there more files?
part=$(expr $part + 1)
done
popd $path
Aqui está um script para testar (eu não tinha mais 1000 arquivos por aí),
for f in 0 1 2 3 4 5 6 7 8 9; do
for g in 0 1 2 3 4 5 6 7 8 9; do
for h in 0 1 2 3 4 5 6 7 8 9; do
touch $f$g$h
done
done
done