Como localizar e copiar arquivos baseados na extensão?

1

Eu tenho uma pasta photorec de um processo de recuperação de dados que tem 2481 pastas com os arquivos recuperados.

Os nomes das pastas estão na sequência recup_dir.1, recup_dir.2 ... recup_dir.2481

Eu tenho uma lista de todas as extensões nessas pastas com este comando:

find . -type f | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u

Então criei outro diretório chamado photorecorg com uma lista de pastas correspondentes a cada extensão que obtive com o comando acima:

mkdir 7z arj asf avi bat blend bmp bz2 cdr DOC docx flac flv gif gz html jpg mobi mov mp3 mp4 mpg ods odt ogg pdf php png ppt ps psd rar rtf svg swf tar tif ttf wav wmf xcf xls xlsx xz zip

Agora, preciso copiar os arquivos na pasta photorec para as pastas de extensão em photorecorg :

Eu pensei em algo como find . -print | xargs cp $0 ../photorecorg/<extension>

Qual seria o comando que pode encontrar os arquivos e copiar para cada diretório de extensão?

    
por Nelson Teixeira 03.04.2017 / 02:33

2 respostas

2
photorec='/pathto/your_photo_recovery_folder'
photorecorg='/pathto/your_photo_recorg_folder'

cd "$photorec" && \
   EXTDIR="$photorecorg" find . -type f -name '*.?*' -exec sh -c '
      for f
      do
         dest=${EXTDIR}/${f##*.}
         cp -p "$f" "$dest/."
      done
   ' x {} +
    
por 03.04.2017 / 02:51
2

Execute o zsh . Coloque autoload zmv no seu ~/.zshrc (ou, para testá-lo, digite isso na linha de comando do zsh). Então você pode usar a zmv function para mover ou copiar arquivos. / p>

mv -Q '**/*(.)' '$f:e/$f:t'

Explicação: o primeiro operando é um padrão de arquivos para mover, o segundo é o padrão de substituição. **/ corresponde arquivos em subdiretórios recursivamente. (.) é um qualificador glob , ele restringe as correspondências a arquivos regulares (por isso, não arrisque diretórios correspondentes). No padrão de substituição, $f designa o caminho original, o modificador e retém apenas a extensão e t retém o nome base completo.

    
por 04.04.2017 / 01:47