Lê arquivos dentro do diretório e os agrupa em um novo subdiretório (criando o subdir e renomeando o arquivo)

4

Eu realizei uma recuperação para arquivos apagados antigos! O processo foi um sucesso completo e recuperou arquivos de anos atrás.

Agora, o problema está passando por todos os 400000 arquivos recuperados do tipo JPG sozinho.

Para lidar com isso, eu já separei os arquivos pelo tamanho deles e armazenei os que correspondem aos critérios em um diretório diferente:

find /path/to/files/ -size +100k -print0 | xargs -0 cp --target-directory=/path/to/filtered/files/

Como os arquivos devem ser analisados remotamente, preparei uma página da Web para mostrar todos os arquivos, permitindo que eles sejam salvos localmente. Esta página da web apresentará os arquivos 20 por vez com setas de navegação!

A minha pergunta é como dividir os arquivos 400000 em subdiretórios contendo 20 arquivos cada, e ter os arquivos renomeados sequencialmente:

Mudar o nome para

000001.jpg
000002.jpg
...
000020.jpg

Mova-se para o subdiretório, criando o subdiretório

page_0001

Repita até que todos os 400000 tenham sido processados!

page_0002/000021.jpg
page_0002/000022.jpg
...
page_0002/000040.jpg
    
por Zuul 24.05.2012 / 13:52

2 respostas

2

Eu tenho o mesmo problema. Eu escrevo este código no BASH e trabalhei para mim.

Mude com as suas necessidades:

#/bin/bash

target_prefix=page

SOURCE_DIR=YOUR_DIR #Change this to source dir

N=0
Z=0

for entry in $SOURCE_DIR/*
do
    N=$((N+1))
    Z=$((Z+1))

    if [ "$N" == "1" ]; then
        mkdir $SOURCE_DIR/$target_prefix-$Z
        DIR="$SOURCE_DIR/$target_prefix-$Z"
    fi

    echo "Move image $entry number $N to dir $DIR"

    mv $entry $DIR/$Z.jpg #Change to your file extension

    if [ "$N" == "20" ]; then
                N=0
        fi
done

Espero que este trabalho.

    
por 06.06.2012 / 01:56
0

O script Bash a seguir deve funcionar, mas não há garantias.

i=1
for f in *
do
  fn=$(printf "%.6d" $i).jpg
  dn=page_$(printf "%.4d" $(($i%20)))
  mkdir -p $dn
  cp $f "$dn/$fn"
  i=$(($i+1))
done
    
por 24.05.2012 / 14:13