Mover imagens de subpastas para novas subpastas

2

Eu tenho uma pasta composta de M de várias subpastas, cada uma delas contendo alguns arquivos de texto e N images ( *.png )

Esta é a aparência da árvore:

/parent/
  /sub-folder1/
   /data1.dat
   /data2.dat
   /image1.png
   /image2.png
   ...
   /imageN.png
 /sub-folder2/
   /data1.dat
   /data2.dat
   /image1.png
   /image2.png
   ...
   /imageN.png
 ...
 /sub-folderM/
   /data1.dat
   /data2.dat
   /image1.png
   /image2.png
   ...
   /imageN.png

observe que todas as imagens em cada subpasta são nomeadas da mesma forma (ex .: image1.png, ..., imageN.png )

O que eu preciso é mover somente as imagens para uma nova pasta pai (digamos parent2 ), enquanto replico a estrutura de subpastas. Depois que a mudança é feita, a nova pasta pai deve ficar assim:

/parent2/
  /sub-folder1/
   /image1.png
   /image2.png
   ...
   /imageN.png
 /sub-folder2/
   /image1.png
   /image2.png
   ...
   /imageN.png
 ...
 /sub-folderM/
   /image1.png
   /image2.png
   ...
   /imageN.png

(isto é: somente imagens e respeitando a mesma estrutura de sub-pastas)

e a pasta parent original deve ter a seguinte aparência:

/parent/
  /sub-folder1/
   /data1.dat
   /data2.dat
 /sub-folder2/
   /data1.dat
   /data2.dat
 ...
 /sub-folderM/
   /data1.dat
   /data2.dat

(ex: imagens movidas)

Eu vi alguns exemplos de scripts que podem mover todos os arquivos para uma nova pasta ( Script de shell para mover todos os arquivos de subpastas para a pasta pai ou alguns que podem mover apenas imagens ( Script para mover imagens ), mas eu não encontrei uma que faria isso respeitando a árvore de sub-pastas .

    
por Gabriel 16.04.2014 / 00:37

2 respostas

4

Você pode tentar usar o rsync:

rsync -av --include="*/"  --include='*.png' --exclude='*' parent1 parent2

isso cria o diretório parent2 e copia todos os arquivos com a extensão .png com estrutura de subdiretórios para ele.
explicação

  • -v verbose para ver o que é copiado
  • -um modo de arquivo (copiar subdiretórios com a mesma propriedade, permissões, etc.)
  • - include '* /' --include = '*. png' inclui os arquivos finais .png A primeira parte é para criar subdiretórios
  • - exclude = '*' excluir todos os outros arquivos Para mais informações, consulte a página do manual do rsync
por kubacapek 16.04.2014 / 02:03
2
  1. Copiar pai1 para pai2
  2. Remover arquivos dat dos subdiretórios parent2
  3. Remover arquivos png dos subdiretórios parent1
$ cp -r parent1/ parent2
$ rm parent2/*/*.dat
$ rm parent1/*/*.png
    
por sasha 16.04.2014 / 01:46