Mover um intervalo seqüencial de arquivos numerados para novos diretórios

0

No meu diretório pai, tenho 78.160 arquivos.
Os nomes dos arquivos são: sb_604_dpm_0089000.dpx, sb_604_0089001.dpx etc.

Eu quero mover os arquivos para 4 subdiretórios subdir1, subdir2, subdir3, subdir4. Deve haver exatamente 20.000 arquivos em cada diretório em ordem seqüencial.

É possível mover um determinado intervalo de arquivos do diretório pai para os subdiretórios, ou seja, sb_604_dpm_0089000.dpx para os arquivos sb_604_dpm_0108,999.dpx para subdir1 sb_604_dpm_0109000.dpx para os arquivos sb_604_dpm_0128,999.dpx para subdir2 etc.

A pasta final conterá apenas os arquivos restantes após os primeiros 60.000.

Tudo isso deve ser feito usando um arquivo de lote, idealmente podendo especificar / verificar o intervalo antes que a movimentação prossiga. Isso é possível?

No DOS eu provavelmente seria capaz de resolver isso escrevendo um arquivo batch, mas com o Linux eu estou um pouco perdido ... Eu não sou um programador, eu sou apenas um usuário linux procurando maneiras mais rápidas / melhores de fazer isso ao invés da GUI, então qualquer ajuda apreciada. Por favor, mantenha o mais simples possível!

Obrigado antecipadamente!

    
por rich 11.05.2018 / 19:54

2 respostas

3

Se for uma tarefa única, você poderá usar a expansão do shell da seguinte forma:

mkdir subdir1 subdir2 subdir3 subdir4
mv sb_604_dpm_{0089000..0108999}.dpx subdir1
mv sb_604_dpm_{0109000..0128999}.dpx subdir2
mv sb_604_dpm_{0129000..0148999}.dpx subdir3
mv sb_604_dpm_*.dpx                  subdir4

{1..5} expande para 1 2 3 4 5 , portanto, os comandos acima se expandem para o primeiro / segundo / terceiro 20.000 arquivos e a última linha trata o restante.

    
por PerlDuck 11.05.2018 / 20:07
2

Algo como este pequeno script deve fazer isso por você:

#!/bin/bash

files=(*.dpx)
folder=1
count=0

if [ ! -d "folder$folder" ]; then
   mkdir "folder$folder"
fi

for i in "${files[@]}"
do
   mv "$i" "folder$folder"
   let count=$count+1
   if [ "$count" == "20000" ]; then
      let count=0
      let folder=$folder+1
      if [ ! -d "folder$folder" ]; then
        mkdir "folder$folder"
      fi
   fi
done

Coloque o script em um arquivo dentro da pasta com os arquivos que você deseja mover (por exemplo, pasta na sua pasta pessoal chamada "meus-arquivos") e nomeie o arquivo como "mover". Então, a partir da linha de comando:

$ cd ~/my-files
$ chmod 755 move
$ ./move
    
por Joshua Besneatte 11.05.2018 / 20:09