Questão Como mover apenas uma quantidade específica de imagens de uma pasta


Eu tenho uma pasta que tem 200.000 imagens. Eu quero fazer o seguinte:

  1. Mova uma quantidade X de imagens (50 imagens, 100 imagens, 200 imagens) dessa pasta para a pasta Y.
  2. Cada pasta Y pode ser um número (Pasta 1, Pasta 2, Pasta 3 ...).
  3. O resultado final pode ser assim:

Pasta 1 (tem quantidade X de imagens) Pasta 2 (tem quantidade X de imagens) Pasta 3 (tem uma quantidade X de imagens) Pasta 4 (tem uma quantidade X de imagens)


4
2017-10-16 00:15


origem




Respostas:


Execute o script no diretório de imagens. Certifique-se de que o destino não tenha nenhum subdiretório.

IMG = 100 # Número de imagens para mover
DES = "." # Destino

I = $ (localizar. -Maxdepth 1 -mindepth 1 -type f | wc -l)
N = $ (((I / IMG) + (I% IMG)))
eval mkdir "$ DES" / pasta {01 .. $ N}

para i em $ (encontre "$ DES" -maxdepth 1 -mindepth 1 -type d | sort); Faz
    mv $ (localizar. -maxdepth 1 -mindepth 1 -type f | sort | grep -m $ IMG '. *') $ i
feito

3
2017-10-16 10:06



Oi Basharat, o script é bom, mas não está funcionando. Ele lança o erro "linha 9: / bin / ls: Lista de argumentos muito longa" por causa das imagens de 200K. - Luis Alvarado♦
@LuisAlvarado fixo. - Basharat Sialvi


Tente este script, ele deve atender a sua solicitação, mas os últimos arquivos X permanecerão no diretório original

OrigDIR = ~ / FolderX
DestDIR = ~ / FolderY
NumberOfMovedItems = $ 1
SubDestDir = $ 2
Contagem = 1

while [`find $ DIR -OrigDIR 1 -type f | wc -l` -gt $ NumberOfMovedItems]; Faz
  NewSubDir = $ DestDIR / $ {SubDestDir} $ {Count}
  mkdir $ NewSubDir
  encontre $ OrigDIR -maxdepth 1 -type f | cabeça -n $ NumberOfMovedItems | xargs -I {} mv {} $ NewSubDir
  deixe o Count ++
feito

Altere o caminho do FolderX e FolderY como desejar.

Quando você executa o script, é necessário fornecer o número de itens a serem movidos e o nome do subdiretório

Fonte


1
2017-10-16 05:45



O script como está, não está funcionando. Já adicionei os $ 1 e $ 2. Testei o script que você mencionou no link e esse está funcionando. Se você puder, edite sua resposta para corrigir o script. - Luis Alvarado♦


Eu começaria criando uma lista

ls X > X.list
for Y in `seq 1 10` ; do mkdir $Y ; mv `head -n $(( Y * 50 )) X.list | tail -n 50` $Y ; done

0
2017-10-16 04:59