copiando arquivos para outro local

1

Eu tenho vários diretórios nomeados como:

15mar20a_00021sq_v01_00019en.frames
15mar20a_00021sq_v01_00020en.frames 
and so on...
Cada

contém 7 arquivos com extensão .raw. Exemplos dos arquivos em um dos diretórios seriam:

IntermediateImage_20150320_180411_n0.raw
IntermediateImage_20150320_180411_n1.raw
IntermediateImage_20150320_180411_n2.raw
...until n7.raw

Eu quero que o script vá para cada diretório e copie os arquivos .raw para um novo diretório fora de seu diretório pai para que eu possa ter todos os arquivos .raw no mesmo local no final de todo o exercício .

Qualquer ajuda seria muito apreciada.

    
por Tofayel 30.03.2015 / 11:22

3 respostas

2

Supondo que os diretórios *frames estejam todos no mesmo diretório, você pode fazer algo como

cd to/the/parent/of/the/frames/dirs
mkdir all-my-raws
cp *.frames/*.raw all-my-raws/

Para evitar a duplicação de arquivos, você pode substituir cp por ln apenas para criar um novo link para os mesmos dados.

    
por 30.03.2015 / 11:48
1

Você pode usar find para isso.

find /path/to/directories -type f -name "*.raw" -exec cp {} /new/path \;

Se você quiser mover os arquivos em vez de copiá-los, substitua cp por mv Depois de mover os arquivos, você pode remover diretórios vazios com find /path/to/directories -type d -empty -exec rmdir {} \;

    
por 30.03.2015 / 11:47
-1

Minha solução proposta:

  1. Colete uma lista de todos os diretórios em uma matriz bash. Algo como %código% Dessa forma, você terá todos os nomes de diretório em uma matriz.

  2. Execute um loop para todo o intervalo com algo como dirs=($(ls *.frames))

  3. Dentro do loop, crie um novo diretório em algum lugar, & mova todos os arquivos do diretório atual para esse local. Algo como

    for i in ${$dirs[@]}; do
        mkdir dir_$i
        mv ($i)/*.raw dir_$i/
    done
    

Isso pode precisar de alguns pequenos ajustes, mas tenho certeza que isso funcionará.

P.S. - Tente algo melhor para criar os novos diretórios: P

    
por 30.03.2015 / 11:44