Mover vários arquivos para várias pastas com base em nomes de arquivos

1

Eu tenho um monte de arquivos em uma pasta chamada numérica como 001001 .. 001002 .. 002001 .. 002002 .. e assim por diante até 114001 .. 114002, eu quero mover cada grupo de arquivos que começam com o mesmo número para uma pasta, todos os arquivos com 001 para a pasta 1, todos os arquivos com 110 para a pasta 110 e assim por diante, não há problema em criar as pastas eu tenho um problema em mover arquivos nas subpastas em uma etapa, espero que alguém me ajude a faça isso

    
por Mohammed Aly 01.06.2013 / 04:13

2 respostas

1

Parece que o principal truque aqui é traduzir o nome do arquivo para o nome da pasta de destino. Há duas etapas: truncar todos, exceto os três primeiros dígitos, e remover o preenchimento zero. Para isso, selecionei os comandos sed e $((10# , respectivamente:

for X in *; do mv $X $((10#$(echo $X | sed -e 's/^\(...\).*//') )); done

Isso me causa erros menores, como mv: cannot move ‘114’ to a subdirectory of itself, ‘114/114’ , mas presumivelmente você não vai se importar com isso se seus arquivos estiverem sendo movidos para onde você quiser.

    
por Paul 01.06.2013 / 04:34
0

Após um liner, você criará os diretórios e moverá os arquivos agrupados:

for f in *; do mkdir ${f:0:3}; mv $f ${f:0:3}/; done

Se você já tem o uso da estrutura de diretórios, siga estas etapas:

for f in *; do mv $f ${f:0:3}/; done
    
por Basharat Sialvi 01.06.2013 / 05:03