Script para copiar arquivos de uma pasta e acrescentar md5sum ao novo nome de arquivo

0

Gostaria de saber se isso é possível:

Eu tenho um grande número de arquivos .mov em uma pasta. Gostaria de saber se posso copiar os arquivos para uma pasta separada, mas incluir o md5sum nos novos nomes de arquivos, após o nome real, mas antes da extensão do arquivo. Então, por exemplo, se uma vez que os arquivos tivessem o nome johnnycash.mov , eu gostaria que ele acabasse parecendo algo assim: johnnycash_8cbda72b2ce62f4a69a0b454ccccbe4.mov

Eu sou um noobie e esse tipo de coisa talvez esteja um pouco acima do meu nível, mas eu apreciaria se alguém tivesse alguma solução viável.

Felicidades!

    
por neil 09.10.2015 / 17:22

3 respostas

1

Este problema é provavelmente melhor abordado em duas etapas:

  1. Copie os arquivos para a nova pasta
  2. Renomeie-os de acordo com seus md5sums

O passo 1 é fácil:

cp -r folder_with_movs new_folder

A etapa 2 precisa de um pouco de script:

cd new_folder
for i in *.mov; do
    bn="${i%.*}"
    ext="${i##*.}"
    md5=$(md5sum "$i" | awk '{ print $1 }')
    mv -v "$i" "${bn}_${md5}.${ext}"
done
    
por 09.10.2015 / 17:54
1

Como existem apenas extensões ".mov", isso facilita um pouco mais do que capturar todas as extensões possíveis:

for file in *.mov; do
 SUM=$(md5sum "$file" | awk '{print $1}')
 cp "$file" <destination>/$(echo "$file" | sed -e "s/.mov/_${SUM}.mov/")
done

Faça um loop sobre todos os arquivos mov.

Calcule o md5sum, pegue somente a primeira coluna da saída (esta instrução awk sempre vem a calhar, agora você a viu)

Copie o arquivo para o novo destino enquanto faz alguma renomeação: sed troca o sufixo ".mov" pela string "_" então o md5sum e depois a extensão ".mov", então ele será conservado.

Esteja ciente dos espaços nos nomes dos arquivos (evite-os melhor).

    
por 09.10.2015 / 17:59
1

Algo assim pode funcionar. É muito difícil, mas vai mover suas coisas com md5sum no nome do arquivo ..

#!/bin/bash

CURRENTDIRECTORY=xxx
NEWDIRECTORY=xxx

for i in 'ls $CURRENTDIRECTORY'; do
    if [ -f $i ]; then
        md5='md5sum $i | awk '{print $1}''
        name=$md5-$i
        cp $i $NEWDIRECTORY/$name
    fi
done
    
por 09.10.2015 / 18:01